楼主: raymond87
3556 8

[数据管理求助] 当sum和total 碰到 local ...碰到了不解之处 [推广有奖]

  • 1关注
  • 0粉丝

已卖:120份资源

本科生

41%

还不是VIP/贵宾

-

威望
0
论坛币
24 个
通用积分
19.7596
学术水平
6 点
热心指数
12 点
信用等级
4 点
经验
749 点
帖子
67
精华
0
在线时间
87 小时
注册时间
2008-4-20
最后登录
2018-6-7

楼主
raymond87 发表于 2014-10-6 21:16:22 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
数据中有两个变量,gr , ind, n_igr 是类别变量,共有3个取值:1,2,3
ind 是连续变量
n_i 是在gr的每个组里面,ind 的序号

我要生成两个新的变量:x 和 y
其中,x是每个gr 的第一个个案,这样,x就有3个取值(gr有3个取值,即3组,每组一个)
y 则是x的三个取值的和。

我的第一种方法是 删除每组中 n_i 不等于1 的个案,然后把剩下的3个值相加,得到y
第二种方法是用的local 。

问题来了,当我用local 时,发现和第一种方法挑出的三个值不一样。
百思不得其解啊~   求大神解惑。


代码如下,各位可以跑下看看。




clear
set      obs  100
gen      gr=runiform()*10
recode   gr (0/3.5=1)  (3.50001/7=2)    (7.00001/10=3)
gen      ind=int(runiform()*30+1)
*  以上为生成数据

bysort gr: gen    n_i=_n

* 下面是第一种方法
preserve
gen   x=gr*ind
keep  if  n_i==1
gen   y=sum(x)
list gr  ind  x y
sum    y
restore

* 下面是第二种方法
preserve
local     x= gr* ind
gen       y=sum(`x')  if n_i==1
sum       y
tab       y
restore



二维码

扫码加我 拉你入群

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

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

关键词:Local Total OCA Sum TOT local

沙发
421073390 在职认证  发表于 2014-10-6 22:45:44 来自手机
raymond87 发表于 2014-10-6 21:16
数据中有两个变量,gr , ind, n_igr 是类别变量,共有3个取值:1,2,3
ind 是连续变量
n_i 是在gr的每个组 ...
艾玛…这是数学问题?经济问题?还是编程问题,…

藤椅
raymond87 发表于 2014-10-6 22:57:34
421073390 发表于 2014-10-6 22:45
艾玛…这是数学问题?经济问题?还是编程问题,…
stata 命令问题

板凳
ywh19860616 发表于 2014-10-7 08:31:42
  1. clear
  2. input x y
  3. 1 2
  4. 3 4
  5. 5 6
  6. end
  7. local d2 = x*y
  8. di `d2'

  9. gen d3 = x*y
复制代码
已有 1 人评分论坛币 学术水平 热心指数 收起 理由
SpencerMeng + 20 + 2 + 2 精彩帖子

总评分: 论坛币 + 20  学术水平 + 2  热心指数 + 2   查看全部评分

报纸
raymond87 发表于 2014-10-7 14:02:51
ywh19860616 发表于 2014-10-7 08:31
你好,dis `d2'  只会显示第一个结果,即1*2=2  
而没有12 和 30

地板
ywh19860616 发表于 2014-10-7 15:12:32
raymond87 发表于 2014-10-7 14:02
你好,dis `d2'  只会显示第一个结果,即1*2=2  
而没有12 和 30
这个就是区别
local不是生成变量,而只是一个值,是暂元。

7
raymond87 发表于 2014-10-8 00:06:06
ywh19860616 发表于 2014-10-7 15:12
这个就是区别
local不是生成变量,而只是一个值,是暂元。
谢谢兄台的回答。
我想 local的功能大概是这样的:
(1)它可以储存变量
(2)但是储存变量是有条件的:变量需要存在才可以储存进local。即表达式如果需要储存进local,需要先生成一个变量来代表它。

下面这个程序就可以正确运行了,因为x*y的表达式首先是用变量表示,然后变量被储存进了local中。

clear
input x y
1 2
3 4
5 6
end
gen   d=x*y
local d2 "d"
list `d2'


再次感谢你的帮助!

8
ywh19860616 发表于 2014-10-8 08:18:27
local 也可以存储空值,比如
local a,默认的就是

9
421073390 在职认证  发表于 2014-10-9 12:59:11
艾玛~太专业了。。。
默默飘走。。。

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

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