具有嵌套循环状态的填充变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有嵌套循环状态的填充变量相关的知识,希望对你有一定的参考价值。
我正在尝试在Stata中创建这样的变量:
date
2012_1
2012_2
2013_1
2013_2
与下一个循环:
forval y=2012/2013
forval m=1/2
display `m'
gen date = `y'_`m'
但是我在第一次迭代中遇到此错误:2012_1 invalid name
。抱歉,如果问题很明显,我是Stata的新手。
答案
您的代码有很多问题。我将一一介绍。
`y'_`m'
的第一个迭代的计算结果为2012_1。由于它包含下划线,因此不能解释为数字。要解释为字符串值,需要将其包含在“”中。最后,Stata尝试将其解释为变量,但2012_1不是有效名称(必须以字母开头),因此会出现错误。
您可以将值括在引号中以创建字符串变量:"`y'_`m'"
。这将适用于第一次迭代,但是由于变量'date'已经存在,因此第二次迭代将出现错误。创建变量后,您只能replace
它。
最后,您的代码没有说明哪个值用于哪个观察值。即使您要解决已经提到的问题,您的变量也将包含所有观察值的相同值,即循环中最后一次迭代的值。要仅替换一个观察值,您必须指定in i
,其中i是观察值。
总共,这将是修改后的代码:
gen date = "."
local obs = 1
forval y=2012/2013
forval m=1/2
display `m'
replace date = "`y'_`m'" in `obs'
local ++obs
但是,我不建议您创建这种类型的日期变量,因为字符串变量在您可以执行的操作中受到限制。 Stata的内部日期格式是最方便的。如果值1和2代表半年,则可以创建半年日期变量,有关如何执行此操作的信息,请参见help datetime
。另一种选择是创建一个包含年份的数字变量,以及另一个包含1和2的数字变量。]
另一答案
您面临的问题比您在这里意识到的要多,但所有问题都很简单。
以上是关于具有嵌套循环状态的填充变量的主要内容,如果未能解决你的问题,请参考以下文章