Как сделать новую переменную в stata

Добавил пользователь Владимир З.
Обновлено: 10.09.2024

Tesis Econometr?a: Manejo de base de datos ENAHO en STATA 13

У меня проблема в Стате. Я хочу объединить несколько переменных в одну. Мои данные выглядят следующим образом (упрощенно):

Теперь я хочу создать новую переменную d состоящий из всех значений переменных a , b а также c , так что d не имеет пропущенных значений:

Я пробовал использовать команду stack a b c, into(d) но затем Stata предупреждает меня, что данные будут потеряны, а от моих данных останется только сложенная переменная и ничего больше. Есть ли другой способ сделать это без переименования переменных a , b а также c ?

Мой набор данных содержит около 90 из этих переменных, которые я хочу объединить в одну переменную, так что, возможно, есть эффективный способ сделать это.

Из вашего примера, который подразумевает числовые переменные и не более одной переменной, не пропущенной в каждом наблюдении, egen с rowmax() функция - это все, что вам нужно.

Вы можете перебирать переменные, заменяя новые переменные значениями других переменных, которые нельзя пропустить. Предполагается, что ваши переменные являются строками. Решение Ника лучше работает для числовых переменных.

  • 1 Спасибо за ответ на этот вопрос! Ответы только на код не приветствуются в Stack Overflow, потому что дамп кода без контекста не объясняет, как и почему решение будет работать, что затрудняет понимание исходной статьи (или любых будущих читателей) логики, стоящей за ним. Пожалуйста, отредактируйте свой вопрос и включите объяснение своего кода, чтобы другие могли извлечь пользу из вашего ответа. Благодарность!
  • 1 Если все переменные строковые, как в этом примере egen с concat() функция является альтернативой.

Вы могли бы аналогичным образом использовать stack как и вы, при указании wide вариант:


Рейтинг:

Учебное пособие по PHP для абсолютных новичков - Изучите PHP с нуля - Часть 1/2

В настоящее время у меня есть 2 переменные, state а также year , в которую я хочу преобразовать в 1 переменную, stateyear .

Я хочу stateyear переменная должна иметь значения в следующем виде: state_year (например. Texas_1962 ).

Как я могу ссылаться на значения в state а также year переменные для создания новых stateyear переменная?

где я предполагаю, что year числовой. Или это могло быть

который заботится о преобразовании любых типов.

Или это могло быть

который не дает вам соединительного подчеркивания. Это поднимает ключевой вопрос: зачем, по вашему мнению, вам нужно это подчеркивание? Это будет просто некрасиво смотреться на графиках или таблицах. Если пробелы (как думают) являются проблемой, как насчет "Северной Каролины_2013" и так далее?

Если + Оператор появляется между двумя строками, это означает, что Stata должна объединить две строки.

Итак, часть state + '_' означает добавить строку '_' после содержимого строковой переменной state . Чтобы убедиться, что + также означает объединение для части '_' + string(year) , Я использовал string() функция, которая превращает числовые значения переменной year в струны.

В str18 часть означает, что вам нужна переменная state_year быть строкой из 18 символов. Это работает для голландских штатов в этих примерах, но вам нужно будет подсчитать количество символов в штате с самым длинным именем и добавить к нему 5, чтобы определить максимальную длину строки в вашем случае. Скажем, это число 21, тогда вам нужно заменить str18 с участием str21

Одно дополнение к решению Ника. Если переменная состояния хранится как числовая с метками значений (например, 1 'Alabama' 2 'Alaska' и т. д.) Я считаю, что вам также нужно будет указать decode вариант, таким образом, чтобы преобразовать метки в строки:


В настоящее время у меня есть 2 переменные, state а также year , в которую я хочу преобразовать в 1 переменную, stateyear .

Я хочу stateyear переменная должна иметь значения в следующем виде: state_year (например. Texas_1962 ).

Как я могу ссылаться на значения в state а также year переменные для создания новых stateyear переменная?

где я предполагаю, что year числовой. Или это могло быть

который заботится о любых необходимых преобразованиях типов.

Или это могло быть

Если + Оператор появляется между двумя строками, это означает, что Stata должна объединить две строки.

Итак, часть state + '_' означает добавить строку '_' после содержимого строковой переменной state . Чтобы убедиться, что + также означает объединение для части '_' + string(year) , Я использовал string() функция, которая превращает числовые значения переменной year в струны.

В str18 часть означает, что вам нужна переменная state_year быть строкой из 18 символов. Это работает для голландских штатов в этих примерах, но вам нужно будет подсчитать количество символов в штате с самым длинным именем и добавить к нему 5, чтобы определить максимальную длину строки в вашем случае. Скажем, это число 21, тогда вам нужно заменить str18 с участием str21

Одно дополнение к решению Ника. Если переменная состояния хранится как числовая с метками значений (например, 1 'Alabama' 2 'Alaska' и т. д.) Я считаю, что вам также нужно будет указать decode вариант, таким образом, чтобы преобразовать метки в строки:

Упражнение 2.1. Используя базу concrete, построим в статистических пакетах Stata, R и Excel описательные статистики для переменных q и /.

Решение. Чтобы загрузить данные в Stata в формате CSV, необходимо выбрать пункт меню File —? Import — > Text data (delimited, *.csv. ) и в появившемся окне указать параметры импортируемого файла; если в нижнем окне предварительного просмотра значения переменных сбились в один столбец, то это значит, что необходимо вручную указать разделитель столбцов в поле Delimiter, выберите Custom и пропишите в появившемся поле точку с запятой (;). Чтобы загрузить данные в Stata в формате DTA, можно либо щелкнуть два раза на нужный файл в формате At а либо выбрать File —*? Open, а затем выбрать нужный файл.

Загружать данные в Stata можно и через окно команд. Сначала необходимо указать папку, в которой лежат базы данных, а затем импортировать нужный файл с нужными параметрами:

import delimited "concrete.csv", delimiter(";") clear

Во всех других задачах с использованием статистического пакета Stata рекомендуется загружать данные таким образом. Если в окне результатов появляется ошибка, то рекомендуется импортировать файл вручную через меню, чтобы увидеть, какие параметры импорта необходимо задать, чтобы столбцы значений корректно определились.

С помощью команды

получим описательные статистики переменных q и /:

Переменная q имеет 299 наблюдений, среднее значение 206 030, стандартное отклонение 294 782,7, минимальное значение 40, максимальное значение 2 808 219. Переменная / имеет 299 наблюдений, среднее значение 211,8328, стандартное отклонение 233,6106, минимальное значение 3, максимальное значение 1585.

В макете R аналогичный результат можно получить с помощью команды summary (data). Здесь и далее предполагается, что данные хранятся в файле data.

Загрузим в пакет с помощью функции read.csvO данные об объеме производства и количестве работников на предприятиях по производству цемента в 2006 г. Эта функция принимает в качестве основного аргумента файл и возвращает базу данных, содержимое которой необходимо присвоить некоторому объекту (назовем его data). В R, в отличие от Stata, есть возможность одновременно обрабатывать несколько баз данных, хранящихся в разных объектах.

Сначала необходимо задать рабочую директорию, а затем считать из нее файл (почти так же, как и в Stata) в объект с названием data. Применим к этому объекту функцию summary О:

Мы видим, что подсчитаны средние значения, максимумы, минимумы и квартили, однако отсутствует стандартное отклонение. Для получения более детальной выдачи можно воспользоваться содержащейся в дополнительном пакете pastecs командой stat.descO; этот пакет требуется загрузить при помощи отдельной команды:

install.packages("pastecs") require(pastecs) stat.desc(data)

После набора этих команд будет выдана следующая таблица:

  • 1
  • 299.000000
  • 0.000000
  • 0.000000
  • 3.000000
  • 1585.000000
  • 1582.000000
  • 63338.000000
  • 145.000000 211.832776
  • 13.510047
  • 26.587185
  • 54573.891405
  • 233.610555
  • 1.102806
  • 4
  • 2.990000e+02
  • 0.000000e+00
  • 0.000000e+00 4.000000e+01 2.808219e+06 2.808179e+06 6.160296e+07 1.253030e+05 2.060300e+05 1.704772e+04 3.354918e+04 8.689683e+10 2.947827e+05 1.430776e+00
  • 2.990000e+02
  • 0.000000e+00
  • 0.000000e+00 7.300000e+01 1.750796e+06 1.750723e+06 3.347044e+07 5.964000e+04 1.119413e+05 1.063959e+04 2.093825e+04 3.384707e+10 1.839757e+05 1.643502e+00

В этой таблице nbr.val — количество значений данной переменной; nbr.null — количество нулевых значений, которые содержатся в переменной, nbr.na — количество пропущенных значений, которые содержатся в данной переменной; min — наименьшее значение данной переменной; шах — наибольшее значение; range — размах переменной; sum — сумма; median — медиана; mean — среднее; SE.mean - стандартная ошибка для среднего значения; CI.mcan.0.95 — длина 95%-ного доверительного интервала; var — дисперсия; std.dev — стандартное отклонение; coef.var — отношение стандартного отклонения к среднему значению (коэффициент вариации).

Чтобы загрузить данные в пакет Excel, можно либо щелкнуть два раза по нужному файлу (если Excel установлен для открытия этих файлов по умолчанию), либо

Описательные статистики переменной в Excel

Рис. 2.1. Описательные статистики переменной в Excel

выбрать Файл — 3 ? Открыть в главном окне программы Excel, а затем выбрать нужный файл. В этом пакете для построения описательных статистик необходимо воспользоваться встроенными функциями (СЧЕТ, МИН, МАКС, ДИСП, СРЗНАЧ и т.д.) (рис. 2.1 у.

Упражнение 2.2. Используя базу auto, построим частотные распределения для переменной headroom (высота автомобильного салона) в статистических пакетах St at a, R и Excel.

Решение. В статистическом пакете Stata команда tab позволяет проанализировать распределение случайной величины. Команда

дает следующие результаты:

В R можно воспользоваться комадой table О для получения таблицы частот. В качестве аргумента она принимает вектор (или матрицу с одним столбцом). Чтобы получить из всего набора данных вектор одной переменной, надо его ограничить. Если какая-либо переменная базы называется, к примеру, vamame, то можно к ней обратиться двумя способами: выбрав переменную из базы данных при помощи конструкции вида data$varname или выбрав столбец базы с этим именем при помощи выражения data[ , cC'varname")]. Первый способ гарантированно выдаст один столбец; при помощи второго же можно выделять подмножества столбцов набора данных, указывая их через запятую: data[ , cO'varnamel", "varname2", . )]. Кроме того, столбцы можно выбирать, указывая их номера: table (data [ , 3]) выведет частоты уникальных значений для переменной, содержащейся в третьем столбце базы. Обратите внимание на пустое место перед запятой: отсутствующий индекс измерения строк означает, что будут взяты все строки (к примеру, чтобы выделить только строки с 11-й по 20-ю и столбцы 2, 5, и 8—10, можно написать data [11:20, с (2, 5, 8:10)]). Полученный результат желательно сохранить как новый объект, чтобы не прописывать каждый раз подобные длинные конструкции, и затем визуализировать удобным способом (кроме того, R обрабатывает крупные исходные наборы данных дольше, чем их небольшие подмножества, выделенные в отдельный объект).

В результате выполнения команд

Графики создаются при помощи команды plot О; в качестве аргументов указывается либо объект, либо столбцы х- и //-координат графика (они должны быть одинаковой длины). Команда

I plot(a, main = "Headroom frequency distribution")

изобразит результат табуляции в виде столбцов, высота которых пропорциональна частотам, а группа команд

Headroom frequency distribution

График частоты значений переменной в R

Рис. 2.2. График частоты значений переменной в R

В пакете Excel необходимо воспользоваться встроенными функциями. Например, с помощью СЧЁТЕСЛ И можно рассчитать количество наблюдений с заданными значениями случайной величины, а затем построить таблицу частотного распределения (рис. 2.3).

Табулирование значений переменной в Excel

Рис. 2.3. Табулирование значений переменной в Excel

Примечание. Команды табулирования не дают хорошего представления о переменных, распределение которых похоже на непрерывное. Например, если переменная GDP содержит значения ВВП различных стран, то tab GDP или table (GDP) покажут, что есть ровно по одному уникальному значению переменной: слишком уникальны эти значения. Намного информативнее табулировать категориальные

переменные, множество значений которых содержит не более нескольких десятков уникальных чисел. Для непрерывных переменных удобнее использовать гистограммы или другие непараметрические оценки плотности распределения.

Упражнение 2.3. Используя базу concrete, построим гистограммы для переменных q и /.

Решение. В статистическом пакете Stata для построения гистограммы необходимо воспользоваться командой hist с указанием имени переменной.

Как можно заметить на рис. 2.4, большая доля значений переменной q сконцентрирована около нуля — распределение переменной q далеко от нормального.

Гистограммы в Stata

Рис. 2.4. Гистограммы в Stata

Переменная / имеет более равномерное распределение, однако опять же большая часть значений сконцентрирована около нуля.

Для того чтобы построить гистограмму в R, можно воспользоваться командой hist О, указав в качестве аргумента объект, содержащий значения переменной. Можно указать функции необязательный аргумент breaks — желаемое количество столбцов на гистограмме 1 . Пример (рис. 2.5):

hist(data$q, xlab = "1", main = "Histogram of q")

hist(data$l, breaks = 16, xlab = "1", main = "Histogram of 1 with 16 bars")


Puc. 2.5. Гистограммы в R

В пакете Excel на вкладке Вставка в разделе Диаграммы есть класс Гистограмма, однако он визуализирует вовсе не распределение переменной, а отдельные се значения в виде столбцов, откладывая по оси абсцисс номер наблюдения (рис. 2.6). Чтобы построить настоящую гистограмму, необходимо воспользоваться надстрой- [4]

Некорректная гистограмма в Excel

Рис. 2.6. Некорректная гистограмма в Excel

Получение данных для гистограммы в Excel

Рис. 2.7. Получение данных для гистограммы в Excel

Корректная гистограмма в Excel

Рис. 2.8. Корректная гистограмма в Excel

Выделите два полученных столбца и только теперь выберите пункт ВставкаДиаграммыГистограмма (см. рис. 2.8).

Упражнение 2.4. Используя базу concrete, построим диаграммы рассеяния для переменных q и /.

Решение. Диаграммы рассеяния можно построить в статистическом пакете Stata с помощью команды

Полученная диаграмма изображена на рис. 2.9.

Диаграмма рассеяния в Stata

Рис. 2.9. Диаграмма рассеяния в Stata

Благодаря данной точечной диаграмме рассеяния можно получить представление о взаимосвязи переменных. На данном графике видно, что взаимосвязь q и / с определенной точностью можно аппроксимировать линией, выходящей из начала координат.

В R диаграмму рассеяния можно построить, воспользовавшись командой plot (). В качестве первого аргумента указываются горизонтальные координаты точек, в качестве второго — вертикальные. Если указать только одну переменную, то R построит диаграмму для значений этой переменной в зависимости от номера наблюдения (рис. 2.10):

plot(data$l, data$q, xlab = "1", ylab = "q", main = "Histogram of q and 1")

plot(data$l, ylab = "1", main = "1 by observation number")


Puc. 2.10. Диаграммы рассеяния в R

В пакете Excel, чтобы построить диаграмму рассеяния, необходимо выделить два интересующих вас столбца и в разделе Диаграммы выбрать Точечная.

Упражнение 2.5. Используя базу concrete, построим Q-Q-графики для переменной q.

Решение. Чтобы построить графики квантилей в статистическом пакете Stata, необходимо воспользоваться командой qnorm (для сопоставления с квантилями нормального распределения) или quantile (для равномерного) (рис. 2.11).

Графики Q— Q для нормального и равномерного распределений в Stata

Рис. 2.11. Графики Q— Q для нормального и равномерного распределений в Stata

В данном случае очевидно, что распределение q значительно отличается от нормального и равномерного.

В R можно воспользоваться встроенной командой qqnormO или более общей qqplotO. По умолчанию выбирается нормальное распределение. Теоретическая линия у = х рисуется командой qqlineO. В результате выполнения команд

qqnorm(dataSq)

qqline(data$q, lwd=2, lty=2) получаем графики, изображенные на рис. 2.12.


Рис. 2.12. График Q—Q в R

В пакете Excel нет подобных графиков, поэтому их необходимо строить собственными силами. Шаги построения подобных графиков в пакете Excel следующие.

  • 1. Постройте квантили эмпирического распределения, использовав частотные распределения.
  • 2. Рассчитайте квантили выбранного вами теоретического распределения, например для нормального распределения необходимо воспользоваться функцией НОРМОБР.
  • 3. Постройте точечную диаграмму, добавив на нее линиюу = х.

Поскольку Q-Q-график крайне важен для изучения распределения случайных величин, рассмотрим еще одно упражнение.

Упражнение 2.6. Используя пакет R, сгенерируем 1000 наблюдений из распределения хи-квадрат с 30 степенями свободы, центрируем и стандартизируем их (вычесть среднее и поделить на стандартное отклонение) и построим для них два Q—(^-графика, расположив по другой оси:

  • а) значения теоретических квантилей из «-распределения с 5 степенями свободы;
  • б) значения эмпирических квантилей выборки из F-расиределения с 40 и 100 степенями свободы размером 300 наблюдений, также центрированной и стандартизованной.

Для облегчения графика будем использовать только лишь процснтили распределения (квантили уровня 0,01, 0,02. 0,99).

Решение. Сгенерируем 1000 наблюдений из х 2 -распредслсния в R (комментарии к команде set.seedO даны в упражнении 6.3). Команда seq(a, Ь, с) генерирует арифметическую прогрессию чисел от а до b с шагом с. Команда quantile (х, levels) возвращает вектор квантилей вектора х для уровней, заданных в векторе levels-.

set.seed(199) х и юо> хотя > конечно, приведенный график отличается от линии у = х на краях (заинтересованный читатель может сам попробовать провести аналогичный эксперимент, варьируя число наблюдений, семейства распределений и их параметры).

Упражнение 2.7. Используя базу concrete, построим корреляционные таблицы для переменных q, / и к.

Решение. Для решения этой задачи в статистическом пакете Stata необходимо набрать команду

к | 0.7797 0.6035 1.0000

Как легко заметить, между переменными наблюдается значимая взаимосвязь. Па главной диагонали такой матрицы (главной диагональю считается та диагональ, что идет из левого верхнего в правый нижний угол) стоят единичные значения, поскольку это корреляции переменных с самими собой. Корреляционная матрица является симметричной, поэтому правая верхняя часть пустая.

Для создания подобных таблиц в статистическом пакете R нужно воспользоваться функцией сог(), в которую надо подставить матрицу или набор данных, содержащий ваши переменные.

Например, для тех же данных с помощью команды

I cor(data) получаем

  • 1 q к
  • 1 1.0000000 0.7394316 0.6035022 q 0.7394316 1.0000000 0.7796918 к 0.6035022 0.7796918 1.0000000

В пакете Excel можно создавать подобные таблицы, воспользовавшись встроенной функцией КОРРЕЛ.

Упражнение 2.8. Используя базу afterlife, построим таблицу сопряженности для изучения связи пола респондента и веры в загробную жизнь.

Решение. Загрузим этот файл в Stata (эти данные также можно загрузить, воспользовавшись командой use). Сразу же экспортируем эти данные в формат CSV, чтобы потом загрузить их в R:

use "http://www.ats.ucla.edu/stat/stata/examples/ieda/afterlife", clear

export delimited using "afterlife.csv", quote replace

Переменная gender обозначает пол респондента: male — мужчина, females — женщина; afterlife — переменная, которая содержит два значения: по — респондент ответил, что не верит в загробную жизнь, yes — респондент ответил, что верит.

Построим таблицу сопряженности, воспользовавшись командой

I tab gender aftlife [fweight = freq], cell row


В R есть команда xtabs, с помощью которой можно строить таблицы сопряженности, например xtabs (data). Чтобы разложить некоторый показатель по факторам, необходимо записать эти факторы в виде формулы (см. упражнение 3.4): после тильды указываются переменные, по которым проводится разбиение. Команда addmarginsO добавляет суммы по строкам и по столбцам:

Читайте также: