Нове в

Змінні псевдонімів у різних фреймах

Highlights

  • Простий доступ до змінних у зв’язаних фреймах лише для читання

  • Заощаджуйте пам’ять з повторюваними значеннями у великих наборах даних

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 у поточному фреймі.