在Stata中的循环中创建新变量

在Stata中的循环中创建新变量,stata,Stata,我目前正在尝试创建一个循环,以取消几百个时间序列的季节性,这些时间序列由搜索查询、从字典中提取的与经济相关的单词组成。我的去季节化所基于的(工作)命令如下所示 sum ACCRUE, meanonly local mACCRUE =r(mean) reg ACCRUE January February March April May June July August September October November December, nocons predict double ACCRU

我目前正在尝试创建一个循环,以取消几百个时间序列的季节性,这些时间序列由搜索查询、从字典中提取的与经济相关的单词组成。我的去季节化所基于的(工作)命令如下所示

sum ACCRUE, meanonly
local mACCRUE =r(mean)
reg ACCRUE January  February March April May June July August September October November December, nocons
predict double ACCRUESA, residual
replace ACCRUESA=ACCRUESA+`mACCRUE'
最后,我根据基准时间序列Accounte创建了一个新的非季节化时间序列,名为AccounteSA

在下一步中,我想为其余的查询自动化命令。我尝试了以下方法

foreach var of varlist a-z {
sum `var', meanonly
local mu =r(mean)
reg `var' January  February March April May June July August September October November December, nocons
predict double `var'SA, residual
replace `var'SA=`var'SA+`mu'
 }
我使用a-z循环查询,但这可能是错误的方法。我的目标是排除每月的傻瓜。无论如何,在执行之后,我得到了一个未知变量的错误。您会注意到,我试图使用“var”和后缀创建一个新变量,但我不确定这种方法是否可行


有人知道如何改进我的命令吗?

问题似乎是您为循环提供的变量列表:
a-z
。我最初建议您改用
\u all

@NickCox正确地指出,
\u所有
都将在
中包含不需要的变量(即月份)。您可以从
中删除这些内容。下面是一个例子

clear all
set more off

*------------------- Create example data -----------------------

sysuse auto

foreach var in `=c(Months)' {
    gen `var' = 0
}

*------------------ Remove some variables ----------------------

* All variables
ds
local allvars = r(varlist)
display "`allvars'"

* Strings to remove
local removethis = c(Months)

* modified local (no months)
local myvars: list allvars - removethis
display "`myvars'"

*-------------------------- Process ----------------------------

foreach var of varlist `myvars' {
    display "`var'"
    sum `var', meanonly
    display r(mean)
}

这涉及到使用宏列表。键入
帮助宏列表
了解详细信息。

这可能是错误的原因:我认为你没有理由这么说。关键是在循环中错误发生的位置。此外,“几百个时间序列”是否真的对应于一个varlist
a-z
。你从ds a-z中得到了什么?我同意@NickCox。我的直觉是,您希望引用数据库中的所有变量。使用
\u all
*
代替
a-z
。或者,明确说明变量。
\u所有
都将包括
一月
十二月
,而不是这里想要的。另一个明显的检查是
一月
十二月
确实存在,与您拼写的名字完全相同。首先,感谢您回答大家的问题。事实上,正如尼克指出的那样,我没有全部使用,因为我不想包括每月的假人。对于显式命名变量,它们太多了。使用a-z更像是一种猜测,因为我在教科书中看到了类似的东西。罗伯托,谢谢你的输入。我编辑了我的帖子以使它更清晰。我需要将搜索查询(=时间序列)作为varlist,从而排除其他变量,例如每月假人。我会试试你的方法,看看它能做什么。再次感谢!我已经发布了一种排除“月”变量的方法。确认一下:varlist
a-z
被认为是一种猜测,事实上,它基本上肯定会破坏你的代码。你需要一种方法告诉斯塔塔变量是什么@罗伯托给了你一些技巧。如果这还不够,您必须告诉我们更多有关数据集中使用的命名约定的信息。是的,我可以确认,varlist a-z是问题所在,其余代码都可以。Robertos代码似乎不起作用,因为它显然试图为各自的月份生成变量,但这些变量已经创建好了。为了让您更好地理解我的数据,我有一些列,其中包含日期(每日)、回报、月份(从日期派生),所有12个月都是伪变量(取决于月份)和查询。也许告诉Stata哪些具体内容不应该在varlist中更容易,所以只需减去回报、月份和伪变量即可。我查一下。