这个问题主要是由于在`forval`循环中,你试图直接使用变量值作为局部宏的赋值语句。但是Stata中的局部宏不能直接接收数值型变量的值,需要通过计算或引用的方式获取。
以下是修改后的代码:
```stata
clear
set obs 100
gen id=mod(_n,25)+1
gen x1=uniform()
gen x2=rnormal()*2+3.5
gen x3=exp(x2)
sum x1 if x1>.6
capture postclose mypost
postfile mypost obs_id x1 x2 x3 using "d:\mypost.dta", replace
forval i = 1(1)100{
qui {
if x1[`i']>.6{
local id : di %9.0g `id'[`i']
local x1 : di %9.0g `x1'[`i']
local x2 : di %9.0g `x2'[`i']
local x3 : di %9.0g `x3'[`i']
post mypost (`id')(`x1')(`x2')(`x3')
}
}
}
postclose mypost
use "d:\mypost.dta", clear
```
在修改后的代码中,我使用了`di %9.0g`格式化输出语句将变量的值存储到局部宏中。注意,路径字符串需要使用双引号包裹。
此外,我还添加了一个`qui{}`块来防止循环中的命令显示输出结果,并且去掉了原本`if`条件语句中的空格以避免潜在错误。这通常有助于提高代码运行时效率并使其更加稳定可靠。希望这个答案对您有所帮助!
此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用