Перенос строковых меток строковой переменной после изменения формы
У меня есть dataset в Stata, который выглядит так
entityID indicator indicatordescr indicatorvalue
1 gdp Gross Domestic 100
1 pop Population 15
1 area Area 50
2 gdp Gross Domestic 200
2 pop Population 10
2 area Area 300
И существует взаимно однозначное отображение между значениями indicator
и значениями indicatordescr
.
Я хочу изменить его на широкий, т. е. на:
entityID gdp pop area
1 100 15 50
2 200 10 300
Где я хотел бы, чтобы gdp
переменная метка была "валовой внутренний продукт", pop
метка "население" и area
"площадь".
К сожалению, как я понимаю, невозможно присвоить значение indicatordescr
как метку значения indicator
, поэтому переформирование не может преобразовать эти значения метки в переменные метки.
Я посмотрел на это : приведите метки значений к меткам переменных при изменении формы wide
И это: http://www.stata.com/support/faqs/data-management/apply-labels-after-reshape/
Но не понимал, как применить их к моему случаю.NB: маркировка переменных после изменения формы должна выполняться программно, поскольку indicator
и indicatordescr
имеют много значений.
1 ответ:
"String labels" здесь является неформальным; Stata не поддерживает метки значений для строковых переменных. Однако здесь требуется, чтобы различные значения строковой переменной становились метками переменных при изменении формы.
Существуют различные обходные пути. Вот один из них: поместите информацию в имя переменной, а затем снова извлеките ее.
clear input entityID str4 indicator str14 indicatordescr indicatorvalue 1 gdp "Gross Domestic" 100 1 pop "Population" 15 1 area "Area" 50 2 gdp "Gross Domestic" 200 2 pop "Population" 10 2 area "Area" 300 end gen what = indicator + "_" + subinstr(indicatordescr, " ", "_", .) keep entityID what indicatorvalue reshape wide indicatorvalue , i(entityID) j(what) string foreach v of var indicator* { local V : subinstr local v "_" " ", all local new : word 1 of `V' rename `v' `new' local V = substr("`V'", strpos("`V'", " ") + 1, .) label var `new' "`V'" } renpfix indicatorvalue
Редактировать если длина имен переменных кусается, попробуйте другой обходной путь:
clear input entityID str4 indicator str14 indicatordescr indicatorvalue 1 gdp "Gross Domestic" 100 1 pop "Population" 15 1 area "Area" 50 2 gdp "Gross Domestic" 200 2 pop "Population" 10 2 area "Area" 300 end mata : sdata = uniqrows(st_sdata(., "indicator indicatordescr")) keep entityID indicator indicatorvalue reshape wide indicatorvalue , i(entityID) j(indicator) string renpfix indicatorvalue mata : for(i = 1; i <= rows(sdata); i++) stata("label var " + sdata[i, 1] + " " + char(34) + sdata[i,2] + char(34)) end
Позже редактировать, хотя вышеизложенное называется обходной путь, это гораздо лучшее решение, чем предыдущее.