我目前有两个变量state
和year
,我希望将其转换为1个变量stateyear
。
我希望stateyear
变量具有以下格式的值:state_year
(例如Texas_1962
)。
如何引用state
和year
变量中的值来创建新的stateyear
变量?
答案 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