楼主: undertone
8565 11

[其他] [求教] 如何批量列求和,并替换和剔除?谢谢啦! [推广有奖]

  • 0关注
  • 0粉丝

已卖:75份资源

本科生

94%

还不是VIP/贵宾

-

威望
0
论坛币
936 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
904 点
帖子
55
精华
0
在线时间
169 小时
注册时间
2005-11-1
最后登录
2024-7-23

楼主
undertone 发表于 2011-1-26 22:02:11 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
假如有如下的数据。现在需要将数个ID为“2”的三条观测值加总,并最终生成一条加总后的观测值。


ID     abc     def     ……     xyz
1       20       78     ……      90
2       50       25     ……      76
2       28       59     ……      80
2       40       89     ……      65
3       46       50     ……      30


如果变量不多,可以通过 egen、total()、replace、duplicates来完成。

我的问题是,如果从abc到xyz间的变量数目很多,如何通过循环流程语句来实现吗?

foreach x of varlist abc-xyz {
       ???????
}

谢谢各位!
二维码

扫码加我 拉你入群

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

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

关键词:duplicates duplicate replace varlist foreach replace 如何

沙发
abc7759abc 发表于 2011-1-26 22:10:50
有点奇怪了。。。
历史是个什么玩意儿~

藤椅
undertone 发表于 2011-1-26 22:31:40
袁老师见怪不怪啦~~~

板凳
sungmoo 发表于 2011-1-27 00:36:03
undertone 发表于 2011-1-26 22:02 假如有如下的数据。现在需要将ID为“2”的三条观测值加总,并最终生成一条加总后的观测值。
ID     abc     def     ……     xyz
1       20       78     ……      90
2       50       25     ……      76
2       28       59     ……      80
2       40       89     ……      65
3       46       50     ……      30
des,varl
loc r=subinstr("`r(varlist)'","ID","",.)
collapse (sum) `r', by(ID)

报纸
undertone 发表于 2011-1-27 07:22:51
sungmoo 发表于 2011-1-27 00:36

des,varl
loc r=subinstr("`r(varlist)'","ID","",.)
collapse (sum) `r', by(ID)
Re:
首先感谢回复。
如果只是求和,似乎直接用collapse(sum) abc-xyz, by(ID)就可以了。
貌似仅此还不能替换掉原来多个ID下的多条记录。
根据你的思路,我觉得可以用preserve和restore来另存出求和之后的数据,随后用append合并,最后可用多种方式删除重复的记录。
这样仍然比较烦琐。好像tempfile命令也不好运用,需要在硬盘上存读临时的求和数据文件。
不知有没有完整的流程语句可以利用。继续请教中……

地板
sungmoo 发表于 2011-1-27 08:48:34
undertone 发表于 2011-1-27 07:22 如果只是求和,似乎直接用collapse(sum) abc-xyz, by(ID)就可以了。
貌似仅此还不能替换掉原来同一ID下的多条记录。
上面考虑的是,ID可以在诸变量之间。

另外,使用collapse,by(ID)后,还存在ID相同的多观测值?

7
undertone 发表于 2011-1-27 09:40:01
sungmoo 发表于 2011-1-27 08:48

上面考虑的是,ID可以在诸变量之间。

另外,使用collapse,by(ID)后,还存在ID相同的多观测值?
Re:
上面的例子是简化后的。实际的情况是,我设有两个ID。其中一个是指示数据来源的。比如下面的“Source”ID。

ID     Source
1          s1
2          s21
2          s22
2          s23
3          s3

使用collapse sum(), by()时,如果by(ID Source),ID“2”的三条记录仍然保留;如果只by(ID),对于“1”和“3”的“Source”ID也就丢失了(对于“2”的“Source”ID将标记为“***”)。这个小问题不知怎么解决。

谢谢!

8
sungmoo 发表于 2011-1-27 10:08:02
undertone 发表于 2011-1-27 09:40 上面的例子是简化后的。实际的情况是,我设有两个ID。其中一个是指示数据来源的。比如下面的“Source”ID。
ID     Source
1          s1
2          s21
2          s22
2          s23
3          s3
所以,问题的描述要尽可能全面、详细。

你的Source的取值有没有什么规律?是否ID=2时,Source="s2"?若否,合并ID后Source的取值原则是什么?(这些需要说明)

9
undertone 发表于 2011-1-27 10:18:50
sungmoo 发表于 2011-1-27 10:08
undertone 发表于 2011-1-27 09:40 上面的例子是简化后的。实际的情况是,我设有两个ID。其中一个是指示数据来源的。比如下面的“Source”ID。
ID     Source
1          s1
2          s21
2          s22
2          s23
3          s3
所以,问题的描述要尽可能全面、详细。

你的Source的取值有没有什么规律?是否ID=2时,Source="s2"?若否,合并ID后Source的取值原则是什么?(这些需要说明)
Sorry……Sorry……

那我就把故事再讲细讲长一点啦。

“Source 1”ID本质就是复制的ID,但其用意在于随后。

随后这个数据集将和其他数据集进行append操作。操作后,所有完整的ID后就跟有诸如“Source 1”、“Source 2”,“Source 3”这样变量。假如ID“7”的数据来自“Source 1”,“Source 1”就有一个诸如“s7”这样的标记,而同时“Source 2”、“Source 3”等就空白。

不知故事讲得怎么样。感谢荣誉版主“桑格木”!

10
sungmoo 发表于 2011-1-27 14:26:17
undertone 发表于 2011-1-27 10:18 那我就把故事再讲细讲长一点啦。
“Source 1”ID本质就是复制的ID,但其用意在于随后。
随后这个数据集将和其他数据集进行append操作。操作后,所有完整的ID后就跟有诸如“Source 1”、“Source 2”,“Source 3”这样变量。假如ID“7”的数据来自“Source 1”,“Source 1”就有一个诸如“s7”这样的标记,而同时“Source 2”、“Source 3”等就空白。
还是没太看明白。

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

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