Stata - это коммерческое статистическое программное обеспечение общего назначения. Он доступен для систем Windows, Mac и Unix. Возможности Stata включают управление данными, статистический анализ и графики. ------------------------------------------------------------ ВАЖНО: нажмите "Узнать больше", чтобы получить совет о том, как задавать высококачественные вопросы, связанные со Stata, на stackru.

О статистическом программном обеспечении 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 предназначен для решения конкретных проблем программирования. Поэтому важно, чтобы вы как можно яснее объяснили свою ситуацию и показали нам, что вы пробовали.

  1. Для начала четко сформулируйте свой вопрос и сообщите нам свою версию и платформу Stata (Windows, Mac, Linux).

  2. Затем дайте контекст. Это должно быть сосредоточено на лаконичном описании слов как вашего набора данных, так и того, что вы пытаетесь сделать.

  3. Затем расскажите нам, как вы пытались достичь своей цели. Этот этап включает в себя прикрепление кода, который вы использовали, и полученного результата. Вы также должны ссылаться на любые похожие вопросы, которые вы задавали в Интернете.

  4. Наконец, предоставьте нам пример данных для запуска кода и воспроизведения вашей проблемы. Эти данные не должны отображаться на скриншоте! Подробнее об этом шаге см. Ниже.


• Могу ли я получить помощь в переводе кода с R/Python/SAS/SPSS на Stata?

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


• Может ли кто-нибудь объяснить мне, почему код Stata, который я использую, не работает?

  1. Проверьте наличие опечаток как в сценарии, так и во фрагменте кода, указанном в вашем вопросе. Интерпретатор Stata неумолим: то, что может показаться простой задачей программирования, может быстро превратиться в упражнение в разочаровании. Добровольцы Stata на stackru здесь не для того, чтобы выслеживать опечатки, вызванные небрежным набором текста.

    Пример:

    locla mymacro HELLO
    genrate var = 5
    

    local mymacro HELLO
    generate var = 5
    
  2. Лучше не сокращать команды и не удалять все пробелы. Это затрудняет чтение кода и повышает вероятность ошибок. Другим неопытным пользователям также может быть трудно распознать даже основные команды.

    Пример:

    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'
    }
    
  3. Не размещайте всю свою 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
    

  1. Обязательно проверьте файл справки, чтобы узнать, почему ваш код не работает. Проблемы часто вызваны неправильным синтаксисом. Вы можете получить доступ к файлам справки для команд и функций, набравhelp command/function name в командной строке Stata.

    Пример:

    list, separate(0)
    option separate() not allowed
    r(198);
    

    Здесь, набирая help listпоказывает, что это недопустимый синтаксис. Действительно, название опцииseparator(#) и нет separate(#).

  1. Прежде чем спрашивать здесь, попробуйте отладить код самостоятельно. В 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.

  1. Если вы используете команду сообщества, которую вы загрузили из SSC, Stata Journal или другого источника, важно указать это в самом начале своего вопроса. Таким образом, люди, которые могут ответить, не тратят время на поиски на внешних сайтах и ​​могут быстрее выявлять проблемы, связанные именно с этой командой.


• Почему не рекомендуется прикреплять снимок экрана с моим набором данных / результатами Stata?

Пожалуйста, не выкладывайте скриншоты!

https://stackru.com/images/e8c7ec6f3a414692846a3d33d53dada90f97fabe.jpg

Снимки экрана не так полезны, как вы надеетесь, в первую очередь потому, что они не позволяют людям, которые могут ответить, копировать и вставлять данные в свои собственные Stata и пытаться воспроизвести проблему.

Простые наборы данных можно вводить с помощью edit команда, которая открывает редактор переменных и позволяет пользователю вручную вводить или вставлять данные.

Кроме того, есть пять других способов предоставить примеры данных для вашего вопроса Stata.

  1. Программно 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 |
       +---------------------+
    
  2. Если ваши данные конфиденциальны, вы можете продемонстрировать проблему с помощью 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 |
       +---------------------------------------------+
    
  3. Кроме того, вы можете напрямую загрузить онлайн-пример набора данных с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 |
       +-------------------------------------+
    
  4. Для примеров с вашим текущим набором данных используйте 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 Команда особенно нужна, когда:

    • Нам нужно четко понимать, является ли переменная, отображаемая в виде текста, действительно строковой или числовой переменной с метками значений.
    • У вас есть переменные даты, которые в противном случае могут быть очень неудобными для людей, которые могут ответить.

  1. Наконец, вы также можете использовать несколько других команд и функций 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:


• Где я могу получить дополнительную консультацию?

Очень важно, чтобы вы также прочитали следующие страницы о переполнении стека:

  1. Экскурсия по сайту
  2. Как спросить
  3. Минимальный, полный и проверяемый пример

Наконец, вы также можете найти полезную информацию в FAQ по статистике.


Полезные ресурсы Stata: