Stata r(109)迭代字符串中的数字的错误消息代码
我有Stata代码来读取一堆.csv文件。我读取一个变量的数据(一列),然后将它与我拥有的数据合并。然后我试着让它重复。我知道第3行到第10行的工作Stata r(109)迭代字符串中的数字的错误消息代码,stata,Stata,我有Stata代码来读取一堆.csv文件。我读取一个变量的数据(一列),然后将它与我拥有的数据合并。然后我试着让它重复。我知道第3行到第10行的工作 local md="0301" while `md'<="0331" { insheet using "Model_11.2.1_2020`md'_results.csv", clear gen pvi_`md'=toxpiscore keep name pvi_`md'
local md="0301"
while `md'<="0331" {
insheet using "Model_11.2.1_2020`md'_results.csv", clear
gen pvi_`md'=toxpiscore
keep name pvi_`md'
sort name
merge 1:1 name using pvi_scores
drop _m
sort name
save pvi_scores, replace
local md=`md'+1
}
这就是问题所在。是字符串加上数字导致了这个问题吗?不是这方面的专家,但相信您应该能够循环数值宏值,并将这些值与循环中字符串的其余部分连接起来:
local mdn = 301
while `mdn' <= 331 {
* concatenate string with local macro
local md = "0" + "`mdn'"
* can also use local md "0`mdn'"
insheet using "Model_11.2.1_2020`md'_results.csv", clear
gen pvi_`md'=toxpiscore
keep name pvi_`md'
sort name
merge 1:1 name using pvi_scores
drop _m
sort name
save pvi_scores, replace
local mdn=`mdn'+1
}
本地mdn=301
虽然'mdn'r(109)
是类型不匹配的:您试图执行字符串操作,但Stata看到一个或多个数字,或者数字操作,但Stata看到一个或多个字符串
. error 109
type mismatch
r(109);
你发现了根本问题
我会这样做:
forval f = 301/331 {
local F "0`f'"
// work in terms of `f' or `F' as needed
}
或者这个:
forval f = 301/331 {
local F : di %04.0f `f'
// work in terms of `f' or `F' as needed
}
在
时使用没有什么错误。但只要问题可以简化为在相邻整数上循环,forvalues
就更干净、更简单。循环中每次递增1是自动的
因此,所需的扭曲是预先加上“0”
,或等效地将整数推送到带有前导零的显示格式中。然后有一个本地宏,它是一个字符串。实际上,所有的本地宏都是字符串;只是Stata会将内容(一旦宏被计算)视为数字,如果这有意义的话。您可以添加(连接)字符串,就像上面隐式完成的那样,或者通过类似的方式
local wanted = "0" + "311"
但关键是两个操作数都必须是字符串,这里用引号分隔符表示。这一事实并不特定于本地宏,但也适用于全局宏、标量和变量
技巧讨论了这个问题。不需要缺乏自信。这是正确的想法。我已经在回答中详细阐述了原则。@NickCox我也从你的回答中学到了一些东西,谢谢。
forval f = 301/331 {
local F : di %04.0f `f'
// work in terms of `f' or `F' as needed
}
local wanted = "0" + "311"