Ново в

Променливи с псевдоними в различни кадри

Акценти

  • Лесен достъп само за четене до променливи в свързани рамки

  • Спестяване на памет при повтарящи се стойности в огромни набори от данни

Stata поддържа множество набори от данни в паметта; всеки набор от данни се намира в рамка. В Stata 18 вече можете да работите с променливи от различни рамки, сякаш те съществуват в една.

Когато наборите от данни са свързани, можете да свържете техните рамки, като използвате командата frlink, за да определите променливите, които съответстват на наблюденията в текущата рамка с наблюденията в свързаната рамка.

Псевдопроменливите, създадени с новата команда fralias add, определят препратки към променливи в свързани рамки. Тези променливи заемат много малко памет, тъй като наблюденията всъщност се съхраняват в друга рамка.

Stata третира псевдопроменливите като всяка друга променлива в набора от данни, с изключение на това, че не можете да променяте техните стойности. За дадена псевдопроменлива, ако промените стойностите на съответната променлива в свързаната рамка, променените стойности са автоматично налични при следващото използване на псевдопроменливата.

Нека видим как работи

Имаме два файла, persons.dta и txcounty.dta, които са свързани. persons.dta съдържа данни за лицата, живеещи в Тексас, а txcounty.dta съдържа данни за окръзите в Тексас. Променливата countyid идентифицира окръзите в Тексас и в двата набора от данни.

По-долу зареждаме наборите от данни в отделни рамки – данните за лицата в текущата рамка, а данните за окръзите на Тексас – в нова рамка, наречена txcounty.

 

Всяка от тези две рамки съдържа променлива, наречена countyid, която идентифицира окръзите на Тексас. Предполагаме, че кодираната стойност за даден окръг на Тексас е една и съща в тези две рамки.

Използваме frlink с променливата countyid, за да свържем наблюденията в текущата рамка с наблюденията в рамка txcounty.

. frlink m:1 countyid, frame(txcounty)
  (all observations in frame default matched)

frlink създава нова променлива, която съпоставя наблюденията в текущия кадър с тези в свързания кадър. В този пример новата променлива е кръстена на свързаната рамка – txcounty, но можете да зададете друго име, като използвате опцията generate().

Можем да създаваме псевдонимни променливи една по една или в групи. Решаваме да използваме *, често срещан пряк път, който съвпада с един или повече символи в имената на променливите, за да създадем псевдопроменлива за всяка променлива в свързаната рамка. В свързаната рамка има само една променлива (различна от countyid), така че получаваме една нова променлива псевдоним в текущата рамка.

.fralias add *, from(txcounty)
  (variable not aliased from linked frame: countyid)
  (1 variable aliased from linked frame)

Въвеждаме fralias describe, за да видим описание на всички променливи с псевдоними в текущия кадър.

fralias describe нашата нова псевдонимна променлива и съобщава, че нейното име е median_income; нейната целева променлива е променлива float, също с име median_income, която се намира в рамката с име txcounty и е свързана с текущата рамка чрез променливата txcounty.

Спомнете си, че от горните извиквания на describe текущата рамка съдържа 20 наблюдения, а свързаната рамка txcounty съдържа осем наблюдения. Мястото в паметта за псевдопроменливата median_income се състои от две характеристики на променливите, използвани за съхраняване на името на свързващата променлива и името на целевата променлива в свързаната рамка. Ако вместо да създадем псевдоним за median_income, използваме frget, за да създадем копие на median_income в текущата рамка, отпечатъкът от паметта за новата променлива float е четири байта за всяко наблюдение в текущата рамка. За нова променлива double това са осем байта за всяко наблюдение. Псевдопроменливите, създадени чрез fralias add, имат малък фиксиран отпечатък в паметта в сравнение с променливите, създадени чрез frget.

Сега можем да използваме променливата median_income като всяка друга променлива, при условие че не се опитваме да променяме нейните стойности. Нека обобщим нейните стойности.

Да предположим, че трябва да променим някои стойности на median_income. Правим промени в median_income в рамката txcounty. Тези промени са автоматично достъпни за променливата alias в текущата рамка.