2015-01-14 2 views
3

Мне нужно сгенерировать новую переменную, которая является стандартизованным значением другой переменной, но группой (по шкале SAT по годам). Я вычислил его, используя следующий код:Стандартизировать переменную по группе в Stata

egen mean_sat = mean(sat), by(year) 
egen sd_sat = sd(sat), by(year) 
gen std_dat = (sat - mean_sat)/sd_sat 

Есть ли еще один прямой способ сделать это? Я попытался следующие без успеха ...

. by year, sort : egen float std_SAT = std(sat) 
egen ... std() may not be combined with by 
r(190); 

. egen std_SAT = std(sat), by(year) 
egen ... std() may not be combined with by 

ответ

3

В настоящее время официально написано egen функция std() не поддерживает операции by. Я не могу определить статистическую или вычислительную причину для этого, но он хорошо документирован. (Почему вам нужно удача, чтобы пройти задокументированное ограничение, которого я не понимаю.)

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

+0

Спасибо, «побочный эффект» мой вопрос в том, что я хотел кого-то, чтобы взглянуть на код, я должен убедиться, что он будет давать правильные результаты :) – OAM

0

Stata не имеет его, но вы можете очень легко сделать это сами. И вот как это делается:

1- Подсказка в том, что вы не можете «стандартизировать» группу, но вы можете принимать средние и стандартные отклонения по группам. Итак, (а) возьмем среднее по группе, (б) возьмем стандартное отклонение по группе и, наконец, (в) стандартизованный_вариабел = (the_var-mean_of_the_var)/std_of_the_var

2 Пример: поэтому давайте стандартизируем переменные «продажи», «компанией». Вот как работает код:

egen company_group = group(company) 
sort company_group 

by company_group: egen sales_mean= mean(sales) 
by company_group: egen sales_sd = sd(sales) 
by company_group: gen sales_std = (sales-sales_mean)/sales_sd 
+1

Это это просто код, поставленный OP в их вопрос! Разница в значительной степени косметическая, независимо от того, выполняется ли операция 'by' с использованием опции или с помощью команды префикса. –

Смежные вопросы