Stata Forvalues删除前导0';s、 如何修复?
我试图创建一个循环,以避免我必须多次键入代码。基本上,我有60个csv文件需要修改和保存。我的代码如下所示:Stata Forvalues删除前导0';s、 如何修复?,stata,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 ti
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,有没有办法解决这个问题?您正在请求一个numlist,但是在这个上下文中,0203
,没有其他说明,在Stata看来,这是一种奇怪但可以接受的编写203
的方法:因此您的问题就来了
但是你真的有一个numlist是0203026:1112
试试看:
numlist "0203 0206 : 1112"
ret li
列表开始于203 206 209 212 215 218 221 224 227 230 233 236
我的猜测是,从2002年3月到2011年12月,每个季度都有一个文件,标签为0203
。事实上,你说你有时间,尽管我的猜测是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
}
依我看,你仍然需要把时间安排在文明的事情上,你最好是附加文件,但每次只解决一个问题
请注意,坚持使用前导零(您认为这是这里的问题,但可能是一种转移注意力的做法)是书面的 您要求的是numlist,但在此上下文中,0203
,没有其他说明,在Stata看来,这是一种奇怪但可以接受的编写203
的方式:因此您的问题就来了
但是你真的有一个numlist是0203026:1112
试试看:
numlist "0203 0206 : 1112"
ret li
列表开始于203 206 209 212 215 218 221 224 227 230 233 236
我的猜测是,从2002年3月到2011年12月,每个季度都有一个文件,标签为0203
。事实上,你说你有时间,尽管我的猜测是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
}
依我看,你仍然需要把时间安排在文明的事情上,你最好是附加文件,但每次只解决一个问题
请注意,坚持使用前导零(您认为这是这里的问题,但可能是一种转移注意力的做法)是书面的