Описание тега stata
О статистическом программном обеспечении Stata
Stata - это интегрированный пакет с интерфейсом "укажи и щелкни" и синтаксисом команд. Последний является частью языка сценариев Ado, который позволяет расширять возможности программирования новых функций, а также автоматизировать повторяющиеся задачи.
Кроме того, Стата предлагает Мата. Это не только интерактивная среда для управления матрицами, но и полноценная среда разработки, которая может создавать скомпилированный и оптимизированный код.
И языки Ado, и Mata могут дополнительно поддерживать объектно-ориентированное программирование через классы.
"Stata" - это придуманное слово, а не аббревиатура, и поэтому все его буквы не должны быть заглавными (т. Е. "STATA" считается неправильным). См. Последний пункт FAQ по статистике.
По состоянию на июнь 2019 года самая последняя версия - Stata 16.
Как задавать качественно воспроизводимые вопросы в Stata
По вопросам, связанным с использованием макросов в контексте Stata, используйте специальный тег stata-macrosв дополнение к тегу stata.
Секрет написания высококачественного воспроизводимого вопроса Stata - это успешное создание изолированного примера. При этом должен использоваться максимально короткий фрагмент кода и минимальный объем данных примера, необходимых для репликации вашей проблемы.
Волонтеры Stata из stackru всегда рады помочь, но не кормят с ложечки. Отсутствие усилий с вашей стороны снизит вероятность того, что вы получите ответ, и увеличит вероятность того, что ваш вопрос в Stata будет закрыт и в конечном итоге удален.
Написать хороший вопрос - задача нетривиальная и требует опыта. Последнее приходит с практикой, которая, в свою очередь, требует настойчивости. Всегда отвечайте на комментарии, требующие разъяснений от потенциальных помощников.
• Могу ли я задать вопрос, если я новичок в Stata и еще не знаю его команды?
Перед тем, как задать вопрос, убедитесь, что вы прочитали " Начало работы со Stata". Вы можете получить доступ к этим вводным руководствам, набравhelp gs
из командной строки Stata.
Просто нет замены знакомству с основными концепциями и синтаксисом Stata. Это особенно важно, поскольку эффективное общение требует, чтобы вы могли говорить на том же языке, что и другие более опытные пользователи Stata в stackru.
Не забывайте, что эти пользователи хотят отвечать на интересные задачи программирования, а не выступать в качестве наставников для обучения основам. Более общий форум, такой как Statalist или reddit, может быть более подходящим для решения проблем, связанных с использованием основных команд.
• Могут ли добровольцы дать мне код для выполнения [чего-нибудь] в Stata?
stackru предназначен для решения конкретных проблем программирования. Поэтому важно, чтобы вы как можно яснее объяснили свою ситуацию и показали нам, что вы пробовали.
Для начала четко сформулируйте свой вопрос и сообщите нам свою версию и платформу Stata (Windows, Mac, Linux).
Затем дайте контекст. Это должно быть сосредоточено на лаконичном описании слов как вашего набора данных, так и того, что вы пытаетесь сделать.
Затем расскажите нам, как вы пытались достичь своей цели. Этот этап включает в себя прикрепление кода, который вы использовали, и полученного результата. Вы также должны ссылаться на любые похожие вопросы, которые вы задавали в Интернете.
Наконец, предоставьте нам пример данных для запуска кода и воспроизведения вашей проблемы. Эти данные не должны отображаться на скриншоте! Подробнее об этом шаге см. Ниже.
• Могу ли я получить помощь в переводе кода с R/Python/SAS/SPSS на Stata?
Вопросы о том, как перевести код с других языков на Stata ado
или
mata
языки действительны только тогда и только тогда, когда есть конкретная проблема, которую нужно решить в пробуемом коде Stata. Следовательно, все пункты, перечисленные в предыдущем и следующем разделах, также актуальны здесь.
• Может ли кто-нибудь объяснить мне, почему код Stata, который я использую, не работает?
Проверьте наличие опечаток как в сценарии, так и во фрагменте кода, указанном в вашем вопросе. Интерпретатор Stata неумолим: то, что может показаться простой задачей программирования, может быстро превратиться в упражнение в разочаровании. Добровольцы Stata на stackru здесь не для того, чтобы выслеживать опечатки, вызванные небрежным набором текста.
Пример:
locla mymacro HELLO genrate var = 5
local mymacro HELLO generate var = 5
Лучше не сокращать команды и не удалять все пробелы. Это затрудняет чтение кода и повышает вероятность ошибок. Другим неопытным пользователям также может быть трудно распознать даже основные команды.
Пример:
forval i=1/5 { loc mymacro`i' HELLO `i' g var`i'=`i' }
forvalues i = 1 / 5 { local mymacro`i' HELLO `i' generate var`i' = `i' }
Не размещайте всю свою
do
файл или сегмент кода, но только проблемную часть. Кроме того, убедитесь, что вы правильно форматируете свой код, используя блоки кода. Если фрагмент кода содержит более пяти или шести строк, при необходимости разбейте его на разделы. Если названия переменных, которые вы используете, не говорят сами за себя, просьба предоставить комментарии.Пример:
sysuse auto
des
sum mpg
gen mempg = r (mean)
gen smpg = r (sum)
reg mpg weight length/* load data */ sysuse auto describe /* descriptive statistics */ summarize mpg generate mean_mpg = r(mean) generate sum_education = r(sum) /* regression analysis */ regress mpg weight length
Обязательно проверьте файл справки, чтобы узнать, почему ваш код не работает. Проблемы часто вызваны неправильным синтаксисом. Вы можете получить доступ к файлам справки для команд и функций, набрав
help command/function name
в командной строке Stata.Пример:
list, separate(0) option separate() not allowed r(198);
Здесь, набирая
help list
показывает, что это недопустимый синтаксис. Действительно, название опцииseparator(#)
и нетseparate(#)
.
Прежде чем спрашивать здесь, попробуйте отладить код самостоятельно. В Stata есть полезные команды отладки, такие как
set trace
(видетьhelp trace
для более подробной информации), который показывает, как код выполняется в реальном времени. Еще одна полезная команда отладки:pause
, который временно приостанавливает выполнение кода (help pause
Чтобы получить больше информации).Пример:
set trace on forvalues i = 1 / 2 { display `i' } - forvalues i = 1 / 2 { - display `i' = display 1 1 - } - display `i' = display 2 2 - }
Используйте эти команды, если ваша проблема не является очевидной синтаксической ошибкой, и включите в свой вопрос выбранный соответствующий вывод, который, вероятно, прольет больше света на причины проблемы. Кроме того, всегда указывайте полный код ошибки и сообщение, которое сообщает Stata.
- Если вы используете команду сообщества, которую вы загрузили из SSC, Stata Journal или другого источника, важно указать это в самом начале своего вопроса. Таким образом, люди, которые могут ответить, не тратят время на поиски на внешних сайтах и могут быстрее выявлять проблемы, связанные именно с этой командой.
• Почему не рекомендуется прикреплять снимок экрана с моим набором данных / результатами Stata?
Пожалуйста, не выкладывайте скриншоты!
https://stackru.com/images/e8c7ec6f3a414692846a3d33d53dada90f97fabe.jpg
Снимки экрана не так полезны, как вы надеетесь, в первую очередь потому, что они не позволяют людям, которые могут ответить, копировать и вставлять данные в свои собственные Stata и пытаться воспроизвести проблему.
Простые наборы данных можно вводить с помощью edit
команда, которая открывает редактор переменных и позволяет пользователю вручную вводить или вставлять данные.
Кроме того, есть пять других способов предоставить примеры данных для вашего вопроса Stata.
Программно
input
можно использовать команду:clear input id str5 name income 1 "Tracy" 90000 2 "Ramon" 70000 3 "Kevin" 80000 end list +---------------------+ | id name income | |---------------------| 1. | 1 Tracy 90000 | 2. | 2 Ramon 70000 | 3. | 3 Kevin 80000 | +---------------------+
Если ваши данные конфиденциальны, вы можете продемонстрировать проблему с помощью
sysuse
команда для загрузки одного из наборов данных игрушек Статы:sysuse dir auto.dta bplong.dta brand2.dta bsexper3.dta census.dta auto2.dta bpwide.dta bsexper1.dta cancer.dta citytemp.dta autornd.dta brand1.dta bsexper2.dta cearep.dta citytemp4.dta sysuse census, clear list state region pop marriage in 1 / 5 +---------------------------------------------+ | state region pop marriage | |---------------------------------------------| 1. | Alabama South 3,893,888 49,018 | 2. | Alaska West 401,851 5,361 | 3. | Arizona West 2,718,215 30,223 | 4. | Arkansas South 2,286,435 26,513 | 5. | California West 23,667,902 210,864 | +---------------------------------------------+
Кроме того, вы можете напрямую загрузить онлайн-пример набора данных с
use
команда:clear use http://fmwww.bc.edu/ec-p/data/wooldridge/vote1 list district voteA expendA shareA in 1 / 5 +-------------------------------------+ | district voteA expendA shareA | |-------------------------------------| 1. | 7 68 328.3 97.41 | 2. | 1 62 626.38 60.88 | 3. | 2 73 99.61 97.01 | 4. | 3 69 319.69 92.4 | 5. | 3 75 159.22 72.61 | +-------------------------------------+
Для примеров с вашим текущим набором данных используйте
dataex
команда:dataex mpg price foreign in 1 / 5, elsewhere ----------------------- copy starting from the next line ----------------------- * Example generated by -dataex-. To install: ssc install dataex clear input int(mpg price) byte foreign 22 4099 0 17 4749 0 22 3799 0 20 4816 0 15 7827 0 end label values foreign origin label def origin 0 "Domestic", modify ------------------ copyup to and including the previous line ------------------
В этом случае первые пять наблюдений переменных
mpg
,price
а такжеforeign
запрашиваются. Обратите внимание на вариантelsewhere
, что объясняется в файле справки дляdataex
.Скопируйте и вставьте все между конечными линиями и используйте
{}
в редакторе вопросов stackru, чтобы отформатировать фрагмент.В
dataex
Команда особенно нужна, когда:- Нам нужно четко понимать, является ли переменная, отображаемая в виде текста, действительно строковой или числовой переменной с метками значений.
- У вас есть переменные даты, которые в противном случае могут быть очень неудобными для людей, которые могут ответить.
Наконец, вы также можете использовать несколько других команд и функций Stata для имитации данных:
/* generate data in wide form */ // discard data in memory clear // set the number of observations in dataset set obs 6 // create a simple identifier generate id = _n // set the random-number seed for reproducibility set seed 12345 // create a uniformly distributed random variable with values between 0 and 1 generate var1 = runiform() // create a normally-distributed random variable with mean 20 and standard deviation 5 generate var2 = rnormal(20, 5) // create random indicator variable 0/1 generate var3 = rbinomial(1, 0.5) // see the results list, separator(0) +---------------------------------+ | id var1 var2 var3 | |---------------------------------| 1. | 1 .3576297 22.72038 0 | 2. | 2 .4004426 20.00814 1 | 3. | 3 .6893833 21.7884 1 | 4. | 4 .5597356 29.39434 0 | 5. | 5 .5744513 33.77373 0 | 6. | 6 .2076905 16.93702 1 | +---------------------------------+
// optionally create value labels for numeric variables such as id above label define idlabel 1 "one" 2 "two" 3 "three" 4 "four" 5 "five" 6 "six" label values id idlabel list id, separator(0) +-------+ | id | |-------| 1. | one | 2. | two | 3. | three | 4. | four | 5. | five | 6. | six | +-------+
// create (random) date variables clear set obs 6 // a daily date numeric variable display date("25/11/2018", "DMY") 21513 generate var1 = 21513 + _n // a random date variable within a specified interval generate var2 = floor( ( mdy(12,31,2018) - mdy(1,1,2017)+1 ) * /// runiform() + mdy(1,1,2017) ) // a half-yearly date numeric variable display yh(2018, 1) 116 generate var3 = 116 + _n // see the raw results list var1 var2 var3, separator(0) +----------------------+ | var1 var2 var3 | |----------------------| 1. | 21514 21004 117 | 2. | 21515 21351 118 | 3. | 21516 21529 119 | 4. | 21517 21532 120 | 5. | 21518 21104 121 | 6. | 21519 21523 122 | +----------------------+
// see formatted results format %tdDD/NN/CCYY var1 format %tdDD/NN/CCYY var2 format %th var3 list var1 var2 var3, separator(0) +----------------------------------+ | var1 var2 var3 | |----------------------------------| 1. | 26/11/2018 04/07/2017 2018h2 | 2. | 27/11/2018 16/06/2018 2019h1 | 3. | 28/11/2018 11/12/2018 2019h2 | 4. | 29/11/2018 14/12/2018 2020h1 | 5. | 30/11/2018 12/10/2017 2020h2 | 6. | 01/12/2018 05/12/2018 2021h1 | +----------------------------------+
/* generate data in long form */ clear set obs 9 // create an identifier increasing every three observations egen id = seq(), block(3) // create a year variable within each id bysort id: generate year = 2015 + _n // create a normally distributed random variable within each id bysort id: generate var = rnormal() // calculate the sum of var within each id bysort id: generate sum_var = sum(var) // note here the use of the `bysort` prefix, which sorts data and repeats // the command for each group of observations // see the results by id list, sepby(id) +-----------------------------------+ | id year var sum_var | |-----------------------------------| 1. | 1 2016 .1973079 .1973079 | 2. | 1 2017 1.610224 1.807532 | 3. | 1 2018 -.8034225 1.004109 | |-----------------------------------| 4. | 2 2016 1.096012 1.096012 | 5. | 2 2017 -.4407027 .6553089 | 6. | 2 2018 -1.011427 -.3561177 | |-----------------------------------| 7. | 3 2016 1.019227 1.019227 | 8. | 3 2017 1.871976 2.891204 | 9. | 3 2018 .4235664 3.31477 | +-----------------------------------+
• Почему Stata не дает желаемых результатов?
Вы всегда должны включать вывод Stata в свой вопрос, копируя и вставляя его прямо из консоли Stata. Затем выберите вставленный результат и нажмите{}
в редакторе вопросов.
Пример:
https://stackru.com/images/72f9932a8dd90275bc08e5a33a50dd75f6ffe127.jpg
. sysuse auto
(1978 Automobile Data)
. regress price mpg i.foreign
Source | SS df MS Number of obs = 74
-------------+---------------------------------- F(2, 71) = 14.07
Model | 180261702 2 90130850.8 Prob > F = 0.0000
Residual | 454803695 71 6405685.84 R-squared = 0.2838
-------------+---------------------------------- Adj R-squared = 0.2637
Total | 635065396 73 8699525.97 Root MSE = 2530.9
------------------------------------------------------------------------------
price | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
mpg | -294.1955 55.69172 -5.28 0.000 -405.2417 -183.1494
|
foreign |
Foreign | 1767.292 700.158 2.52 0.014 371.2169 3163.368
_cons | 11905.42 1158.634 10.28 0.000 9595.164 14215.67
------------------------------------------------------------------------------
Если Stata вернется к вам с неожиданными результатами, скорее всего, он был запрограммирован неправильно. Stata просто выполняет то, что ему приказывает делать пользователь.
Тем не менее, пользователи stackru не умеют читать мысли. Предоставление примера желаемого результата значительно увеличит ваши шансы получить полезный ответ.
Если это график, вы можете опубликовать изображение, иллюстрирующее результат. В противном случае лучше всего подойдет таблица с достаточным количеством ожидаемых результатов. Его можно сгенерировать с помощью онлайн-создателя таблиц (например, генератора таблиц или генератора таблиц ASCII) и вставить в свой вопрос в соответствующем формате в блоках кода.
Пример:
Страна Население Средний_ возраст Пол_ Соотношение ВВП
Соединенные Штаты Америки 3999 23 1,01 5000
Афганистан 544 19 0,97 457
Китай 10000 27 0,96 3400
+--------------------------+------------+----------+-----------+------+
| | Population | Mean_Age | Sex_Ratio | GDP |
| Country | | | | |
+--------------------------+------------+----------+-----------+------+
| United States of America | 3999 | 23 | 1.01 | 5000 |
+--------------------------+------------+----------+-----------+------+
| Afghanistan | 544 | 19 | 0.97 | 457 |
+--------------------------+------------+----------+-----------+------+
| China | 10000 | 27 | 0.96 | 3400 |
+--------------------------+------------+----------+-----------+------+
• Есть ли примеры качественных вопросов?
Следующие вопросы можно рассматривать как хорошие примеры того, как вы должны структурировать свой собственный вопрос программирования, связанный со Stata:
Метки осей смещены от центра при разбиении на несколько линий
Получение coefplot для использования заголовков оценок или меток результатов
Однострочный для обертывания текста вокруг элементов списка чисел
• Где я могу получить дополнительную консультацию?
Очень важно, чтобы вы также прочитали следующие страницы о переполнении стека:
Наконец, вы также можете найти полезную информацию в FAQ по статистике.
Полезные ресурсы Stata:
- Официальный сайт
- Часто задаваемые вопросы по Stata
- Документация Stata
- Список рассылки и публикации Stata с конца марта 2014 г.
- Архивы списков рассылки Stata до конца марта 2014 г.
- Ресурсы, которые помогут вам изучить и использовать Stata