楼主: chrisky
13933 7

[编程问题求助] 使用stata global 和 local命令时的一个问题 [推广有奖]

  • 1关注
  • 3粉丝

已卖:8份资源

讲师

42%

还不是VIP/贵宾

-

威望
0
论坛币
8513 个
通用积分
80.9516
学术水平
24 点
热心指数
39 点
信用等级
19 点
经验
6622 点
帖子
132
精华
0
在线时间
893 小时
注册时间
2009-7-12
最后登录
2025-3-10

楼主
chrisky 发表于 2014-8-6 18:26:52 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我在使用stata global 和 local命令时,出现了如下的一个问题。特向各位高手请教:

所用到的数据集test_year的内容如下:
QQ截图20140806183127.png


代码如下:
  1. use test_year,clear
  2. forvalues i=1(1)5 {
  3.     global y`i'=year[`i']
  4.     display $y`i'
  5. }
复制代码
显示的结果是
    1
    2
    3
    4
    5

但是我单独使用
   
  1. display $y1
  2. display $y2
  3. display $y3
  4. display $y4
  5. display $y5
复制代码

时能显示
    2012
    2011
    2010
    2009
    2008


我使用local 命令时
   
  1. use test_year,clear
  2. forvalues i=1(1)5 {
  3.    local y`i'=year[`i']
  4.    display `y`i''
  5. }
复制代码

显示的结果是
    2012
    2011
    2010
    2009
    2008

请问这是什么原因?


二维码

扫码加我 拉你入群

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

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

关键词:Global Local lobal Stata tata display local

沙发
chrisky 发表于 2014-8-6 19:47:20
数据集(请下载后将扩展名改为dta)

藤椅
chrisky 发表于 2014-8-9 16:19:06
木有高手了解这个情况吗?

板凳
xiaofengshen 发表于 2014-8-10 04:14:35
用global最后一行要加大括号,应该是display ${y`i'},不然的话,$只对y有作用,辐射不到`i'
不用loop的时候,global会将y和它后面的东西识辨为一个变量名
用local的时候,你已经写了display `y`i'',也就是说把y和`i'已经通过单引号连在一起了,所以就没有这个问题
已有 1 人评分学术水平 热心指数 收起 理由
wyddy + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

报纸
chrisky 发表于 2014-8-10 14:33:12
xiaofengshen 发表于 2014-8-10 04:14
用global最后一行要加大括号,应该是display ${y`i'},不然的话,$只对y有作用,辐射不到`i'
不用loop的时 ...
太感谢了。一直以来这个问题都困扰我。

地板
chrisky 发表于 2014-8-10 14:35:36
xiaofengshen 发表于 2014-8-10 04:14
用global最后一行要加大括号,应该是display ${y`i'},不然的话,$只对y有作用,辐射不到`i'
不用loop的时 ...
也就是说,在用loop的时候,如果要用到global定义的变量,并且里面还包含了与loop有关的变量时,要用{}括起来。如果不用loop的时候则没问题。我的理解对吧?

7
xiaofengshen 发表于 2014-8-10 17:41:27
chrisky 发表于 2014-8-10 14:35
也就是说,在用loop的时候,如果要用到global定义的变量,并且里面还包含了与loop有关的变量时,要用{}括 ...
我觉得是这样的 我也是在实际操作中发现的 具体也没有查过有没有这样的规则

8
wshzh 发表于 2021-6-3 17:31:37
xiaofengshen 发表于 2014-8-10 17:41
我觉得是这样的 我也是在实际操作中发现的 具体也没有查过有没有这样的规则
感谢您的回复。我最近也被这个问题所困扰,一直没有解决。意外发现了7年前竟然有人问了我和同样的问题。
为了防止有人有和我同样的问题,并且没有看懂答主的回复。我来对您的回复进一步进行解释:
答主的意思是,在本问题中的情况,应该使用在循环中使用display ${y`i'},避免$符号仅仅识别了y,没有识别上`i'

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

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