如何在Stata中创建引用其他字符串变量的字符串变量?

时间:2013-11-21 07:13:27

标签: stata

我目前有两个变量stateyear,我希望将其转换为1个变量stateyear

我希望stateyear变量具有以下格式的值:state_year(例如Texas_1962)。

如何引用stateyear变量中的值来创建新的stateyear变量?

3 个答案:

答案 0 :(得分:7)

那可能是

 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

答案 1 :(得分: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    

如果+运算符出现在两个字符串之间,则表示Stata必须连接两个字符串。

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

str18部分意味着您希望变量state_year是一个包含18个字符的字符串。这个示例中适用于荷兰国家,但您需要计算具有最长名称的状态中的字符数,并将其加5,以确定您的案例中字符串的最大长度。假设该数字为21,那么您需要将str18替换为str21

答案 2 :(得分:1)

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

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