Forvalues下降领先0,如何解决?

时间:2016-05-11 15:18:35

标签: stata

我正在尝试创建一个循环来保存我不得不多次键入代码。基本上,我有60个csv文件,我需要更改和保存。我的代码如下:

forvalues i = 0203 0206 : 1112 {
    cd "C:\Users\User\Desktop\Data\" 
    import delimited `i'.csv, varnames(1)
    gen time=`i'
    keep rssd9017 rssd9010 bhck4074 bhck4079 bhck4093 bhck2170 time
    save `i'.dta, replace
}

然而,我收到错误" 203.csv"不存在。它似乎正在放弃领先的0,任何方法来解决这个问题?

1 个答案:

答案 0 :(得分:2)

你要求的是一个 numlist ,但在这个上下文0203中,没有别的说法,只是把Stata看成是一种古怪但可以接受的写203的方式:因此你的问题。

但你真的有{em> numlist 是0203 0206 : 1112吗?

试一试:

numlist "0203 0206 : 1112"
ret li

列表开始203 206 209 212 215 218 221 224 227 230 233 236 ...

我的猜测是,你有文件,一个时期每个季度一个,2002年3月标记为0203,2011年12月标记为1112。实际上你确实说过你有时间,即使我的猜测意味着40个文件,而不是60个。如果是这样,那意味着你没有一个标有0215的文件,所以这在任何情况下都是错误的思考方式。

这是一种更好的方法。首先将cd取出循环:你只需要做一次!

cd "C:\Users\User\Desktop\Data" 

现在找到????.csv的文件。您只需安装fs一次。

ssc inst fs 
fs ????.csv 

foreach f in `r(files)' {

    import delimited `f', varnames(1)
    gen time = substr("`f'", 1, 4)  
    keep rssd9017 rssd9010 bhck4074 bhck4079 bhck4093 bhck2170 time
    save `time'.dta, replace
}

根据我的猜测,你仍然需要把时间安排在文明的东西上,你最好append文件,但一次只有一个问题。

请注意,坚持使用您认为存在问题的前导零,但可能是红鲱鱼,会写入here

相关问题