楼主: blankbox
3923 5

[编程问题求助] stata local命令无效 [推广有奖]

  • 2关注
  • 1粉丝

硕士生

7%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
16.7095
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1280 点
帖子
50
精华
0
在线时间
138 小时
注册时间
2019-12-30
最后登录
2022-6-17

楼主
blankbox 发表于 2020-9-11 18:58:36 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我想把控制变量用local汇总起来,命令如下:
local cv1 SOE ROA Lev_Ind Grow Fata Size Top1
sum `cv1'
却发现显示所有变量
reg Capex tt `cv1'
发现只有Capex和tt参与了回归
我的命令错哪里啊

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Local Stata tata OCA capex

沙发
qiangli 发表于 2020-9-11 19:59:39 来自手机
在do文件中执行

藤椅
ritaing 发表于 2020-9-11 22:57:48
使用local命令的时候,关于local定义的一定要一起运行。
比如你这个一共有三行命令,要全部选中一起运行。

板凳
9608478152 发表于 2021-3-21 12:25:13
ritaing 发表于 2020-9-11 22:57
使用local命令的时候,关于local定义的一定要一起运行。
比如你这个一共有三行命令,要全部选中一起运行。
感谢回答。
请问之前定义了local,怎么才能在后面不用local可以直接运行?  定义那一行离得很远了,只能复制过来再一起运行吗?

报纸
lydiasly 发表于 2022-4-16 21:03:57
9608478152 发表于 2021-3-21 12:25
感谢回答。
请问之前定义了local,怎么才能在后面不用local可以直接运行?  定义那一行离得很远了,只能 ...
要这样的话,用全局宏global就好了,local只在运行的时候管用,用完就没了

地板
赵安豆 发表于 2025-6-3 22:36:35
在Stata中,`local` 命令用于定义宏。您已经正确地使用它来创建一个包含多个控制变量名称的宏 `cv1`。

但是,在您尝试使用这个宏进行操作时(如 `sum` 或者 `reg` 命令),需要正确引用宏中的内容。当您直接在命令中写 `cv1`,Stata会将 `cv1` 视为一个变量名而不是将其展开为变量列表。

正确的引用方式是使用双引号和单撇号,如下所示:

对于 `sum` 命令:
```stata
sum `cv1'
```
这个命令是错误的。应该写成这样:
```stata
summarize `cv1'
```
但是,由于 `summarize` 无法直接接受宏中的变量列表,您需要在宏名前后添加空格和单撇号(也就是引号内的反撇号),如下所示:

```stata
summarize "`cv1'"
```

对于 `reg` 命令:
```stata
reg Capex tt `cv1'
```
这个命令同样是错误的。正确的使用方式是:
```stata
regress Capex tt "`cv1'"
```

这样,Stata会将宏中的变量列表展开,并将其作为回归模型的控制变量。

但要注意,直接在命令中用这种方式引用包含空格的宏可能会出问题(例如当 `cv1` 中有变量名如 `SOE ROA`),因此实际使用时需要确保宏中的每个变量名都是单独列出的。更安全的做法是先将宏内容转换成真正由空格分隔的列表,可以使用 `tokens` 来实现这一点:

```stata
local cv1 : word list SOE ROA Lev_Ind Grow Fata Size Top1

regress Capex tt `cv1'
```

但是直接使用 `word list` 的方式在 Stata 16 及其更新的版本中才可用,对于更早的版本,你可能需要使用其他方法来确保宏中的变量被正确引用。例如:

```stata
local cv1 SOE ROA Lev_Ind Grow Fata Size Top1

foreach var in `cv1' {
    qui sum `var'
}

regress Capex tt `cv1'
```

这样,`foreach` 循环将确保每个变量被单独引用,并且避免了因宏中的空格而引起的问题。在回归命令中使用时,同样需要使用反撇号和引号来正确展开宏内容。

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-5 16:47