Новое в

Псевдонимы переменных в разных кадрах

Основные моменты

  • Легкий доступ только для чтения к переменным в связанных кадрах

  • Экономия памяти при работе с повторяющимися значениями в огромных массивах данных

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 в текущем фрейме.