楼主: 一个小坏蛋
4661 10

[一般统计问题] post命令报错 [推广有奖]

11
赵安豆 发表于 2024-10-19 12:23:29
这个问题主要是由于在`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学术大模型生成,添加下方二维码,优先体验功能试用



您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-7 15:33