2013-11-21 84 views

回答

6

更换str18这可能是

gen state_year = state + "_" + string(year) 

在那里我假设year是数字。或者它可以是

egen state_year = concat(state year), p(_) 

它负责所需的任何类型转换。

或者它可能是

egen state_year = group(state year), label 

不给你一个连接下划线。这提出了一个关键点:为什么你认为你需要这个下划线?它只会在图表或表格上看起来很丑。如果空间(被认为是一个问题),那么“North Carolina_2013”​​等等呢?

对于这个问题的一个缩影综述见http://www.stata-journal.com/sjpdf.html?articlenum=dm0034

5

下面是一个例子:

// create some example data 
clear 
input /// 
str13 state  int year 
"Noord-Holland" 1962 
"Zuid-Holland" 1963 
"Utrecht"  1964 
"Zeeland"  1965 
"Noord-Brabant" 1966 
"Limburg"  1967 
"Gelderland"  1968 
"Flevoland"  1969 
"Overijsel"  1970 
"Drente"   1971 
"Friesland"  1972 
"Groningen"  1973 
end 

// create the variable 
gen str18 state_year = state + "_" + string(year) 

// admire the result 
list  

如果出现2串之间的+操作,那么就意味着Stata的具有以连接两个字符串。

因此,部分state + "_"表示在字符串变量state的内容之后添加字符串"_"。为了确保+也意味着连接部分"_" + string(year),我使用了string()函数,该函数将变量year的数值变成字符串。

str18部分表示您希望变量state_year为包含18个字符的字符串。这个例子适用于荷兰国家,但是您需要计算最长名称状态下的字符数,然后加上5来确定您的情况下字符串的最大长度。说这个数字是21,那么你就需要用str21

1

一个除了尼克的解决方案。如果状态变量存储为数字与值标签(例如1 "Alabama" 2 "Alaska"等),我相信你也将需要指定decode选项,从而将标签转换成字符串:

​​