具有嵌套循环状态的填充变量

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的数字变量。]

另一答案

您面临的问题比您在这里意识到的要多,但所有问题都很简单。

以上是关于具有嵌套循环状态的填充变量的主要内容,如果未能解决你的问题,请参考以下文章

for 循环与嵌套

具有深度嵌套数组循环的 SQL 查询 OpenJson

两层c:forEach循环嵌套

java替代使用嵌套for循环

CUDA:并行化具有嵌套循环的函数调用的多个嵌套for循环

Ruby嵌套for循环以填充数组数组