Stata r(109)迭代字符串中的数字的错误消息代码

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'

我有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'
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"