从Stata local创建一个变量

从Stata local创建一个变量,stata,Stata,我想知道如何创建一个存储宏值的变量。最简单的例子是在下面的forvalues`循环中存储i'的值 forvalues i = 1/10 { dis `i' } 据我所知,我可以生成名为'I'格式的变量,但不能直接将I的值存储到另一个变量。我最终要做的是创建一个年份变量,该变量使用循环存储数据集的年份: forvalues i = 2000/2020 { use dataset`i' gen year`i' = `i' *gen year`i' = "`i'" ***this

我想知道如何创建一个存储宏值的变量。最简单的例子是在下面的forvalues`循环中存储
i'的值

forvalues i = 1/10 {
dis `i'
}
据我所知,我可以生成名为'I'格式的变量,但不能直接将I的值存储到另一个变量。我最终要做的是创建一个年份变量,该变量使用循环存储数据集的年份:

forvalues i = 2000/2020 {
use dataset`i'
gen year`i' = `i'
*gen year`i' = "`i'" ***this did not work either
}
上面的代码生成了一组

year`i' 

具有0或空值。

语法在我看来很好。因此,错误报告令人费解。各种评论如下:

一种猜测是,尽管您的引号在这里看起来很好,但您可能使用了不同的字符。这里的左引号和右引号是Stata术语
uchar(96)
uchar(39)

Stata没有NULL的概念。对于数值变量,通用缺失值由点、句点或停止点表示
。我不明白为什么你会得到一个变量,除了2000/2020中的一个作为它的值。(因此0的结果也很神秘。)

本地宏的一个缺陷是包含它们的代码必须作为一个整体执行;否则,本地宏的定义在引用它们的语句中不可见。但是,如果这是咬很难看出为什么你会得到任何结果


像这样做的一个常见动机是作为附加数据集的一个步骤,每年一个。但由于在每种情况下都有不同的变量名,这就更加复杂了。新变量在每个数据集中应该有相同的名称,比如说
year
,而不是不同的名称
year2000
等等。

是的,您对
append
ing数据集的看法是正确的,是的,我希望year变量在所有数据集中都是相同的,上面的代码主要用于说明。经过反复检查,代码正常工作。也许当我在内存中没有数据的情况下进行测试时,它没有生成任何结果,因为观察值的数量是0,而不是代码本身的错误。很高兴您解决了问题,但您似乎在说您的代码不是您尝试的代码,甚至与您尝试的代码不可比。您从CV开始,但在任何平台上,最少的可重复示例都是理想的