在Stata循环中创建新变量

时间:2014-03-06 15:42:10

标签: stata

我目前正在尝试创建一个循环来延迟数百个时间序列,其中包括搜索查询,从词典中获取的与经济相关的单词。 (工作)命令我的deseasonal化基于这样的

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'

所以最后我从基准时间序列ACCRUE创建了一个名为ACCRUESA的新的延长时间序列。

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

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'和后缀创建一个新变量,但我不确定这种方法是否可行。

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

1 个答案:

答案 0 :(得分:1)

问题似乎是您为循环提供的变量列表:a-z。我最初建议您使用_all。 @NickCox正确地指出_all会在<varlist>(即月份)中包含不需要的变量。您可以从<varlist>中删除这些内容。下面是一个例子。

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)
}

这涉及使用宏列表。输入help macrolists了解详情。