楼主: wat1231994
4642 9

[问答] 合并加总月度数据为年度数据 [推广有奖]

  • 7关注
  • 4粉丝

已卖:1份资源

本科生

70%

还不是VIP/贵宾

-

威望
0
论坛币
472 个
通用积分
20.4422
学术水平
5 点
热心指数
6 点
信用等级
0 点
经验
241 点
帖子
44
精华
0
在线时间
161 小时
注册时间
2017-3-29
最后登录
2019-9-19

楼主
wat1231994 发表于 2018-11-25 21:27:59 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
目前,我已将12个月度的数据合并在同一张表上,但由于数量量过大,用stata处理的时候发现出错了,听所sas在处理大数据上有优势,于是转战sas。其中,有shipment_date(日期)、party_id(企业代码)、company(企业名称)、tel(电话号码)、country(进口国)、shipment(贸易方式)、valuee(价值)、quantity(数量)等变量。1.某些企业(如a企业)在某个月,电话号码是缺失的,但在另一个月又有电话号码数据(如0512-67611121),怎么将a企业的电话号码缺失部分用0512-67611121来填充?(用stata的话,可以使用bysort company:replace tel=tel[_n-1] if tel=="" & tel[_n-1]!="",但是sas需要什么命令是真的不清楚)
2.之后,我希望只要属于同一年份,对变量party_id(企业代码)、company(企业名称)、tel(电话号码)、country(进口国)、shipment(贸易方式)相同的valuee、quantity进行求和加总。(stata代码为collapse (sum) valuee quantity,by( hs6 party_id company companytype tel zip pperson country shipment unit exp_or_imp ),希望有坛友能告知sas的代码)万分感谢! 12.dta (39.7 MB) 这是数据的一部分,希望有知道的坛友能帮助一些,真的很感谢。
例如:
shipment_date        party_id   company             tel           country    shipment     valuee   quantity
  200601                  0001         a               3506231         美国         一般贸易      20          3
200601                  0002          b               3506232          美国         一般贸易      30         3
200602                  0001          a               3506231          美国         一般贸易      40         6
200602                   0002          b               3506232          美国         一般贸易      30         3
200602                  0001           a                                    美国         加工贸易      40         6
200602                  0002          b               3506232          意大利       一般贸易     30         3
希望结果为:
party_id   company             tel           country    shipment     valuee   quantity
0001         a               3506231         美国         一般贸易      60          9
0001           a             3506231          美国         加工贸易     40           6
0002          b             3506232         美国         一般贸易     60           6
0002          b            3506232          意大利       一般贸易    30            3


二维码

扫码加我 拉你入群

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

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

关键词:一般贸易 电话号码 加工贸易 企业名称 企业代码

回帖推荐

steven_1017 发表于2楼  查看完整内容

楼主,两个办法可以做此事,代码如下:
已有 1 人评分热心指数 收起 理由
eijuhz + 1 精彩帖子

总评分: 热心指数 + 1   查看全部评分

沙发
steven_1017 发表于 2018-11-26 00:44:29
楼主,两个办法可以做此事,代码如下:
  1. /*导入数据集*/
  2. data work.test;
  3. length year $4;
  4. infile <infile-specification>;/*你的数据来源,txt或者excle,具体看数据类型来拟定本条代码*/
  5. input shipment_date $ party_id $ company $ tel $ country $ shipment $ valuee quantity;
  6. year = substr(shipment_date,1,4);/*仅需要同一年份,则月份无所谓,去掉*/
  7. drop shipment_date;
  8. if tel eq '' then tel = '0512-67611121';/*填充缺失的电话号码*/
  9. run;
  10. /*两种方法*/
  11. /*方法一:用data step的方法*/
  12. proc sort data=work.test out=work.method;
  13. by year party_id company county shipment;
  14. run;

  15. data work.method_1;
  16. set work.method;
  17. by year party_id company county shipment;
  18. if first.shipment then do;
  19. sumvaluee + valuee;
  20. sumqua + quantity;
  21. end;
  22. if last.shipment;
  23. run;

  24. /*方法二:用sql的方法*/
  25. proc sql;
  26. create table work.method_2 as
  27. select year,party_id,company,tel,country,shipment,sum(valuee) as sumvaluee,sum(quantity) as sumqua
  28. from work.method
  29. group by year,party_id,company,country,shipment
  30. order by year,party_id,company,country,shipment;
  31. quit;
复制代码

藤椅
wat1231994 发表于 2018-11-26 09:35:10
steven_1017 发表于 2018-11-26 00:44
楼主,两个办法可以做此事,代码如下:
真的太感谢了,我去试试。不过在第8步,填充电话号码,因为数据有几百万条,在不知道这个具体的电话号码0512-67611121的情况下,我要怎么填充呢

板凳
steven_1017 发表于 2018-11-26 10:56:52
wat1231994 发表于 2018-11-26 09:35
真的太感谢了,我去试试。不过在第8步,填充电话号码,因为数据有几百万条,在不知道这个具体的电话号码0 ...
不好意思看漏了,if tel eq ' ' AND company = 'a' then tel = '0512-67611121';

报纸
steven_1017 发表于 2018-11-26 12:59:32
wat1231994 发表于 2018-11-26 09:35
真的太感谢了,我去试试。不过在第8步,填充电话号码,因为数据有几百万条,在不知道这个具体的电话号码0 ...
你要是不压缩数据,就让它missing,假如你要压缩数据的话,那就是统一用0代表这些缺失的电话号码咯。

地板
wat1231994 发表于 2018-11-26 20:08:26
steven_1017 发表于 2018-11-26 10:56
不好意思看漏了,if tel eq ' ' AND company = 'a' then tel = '0512-67611121';
嗯嗯,多谢了。那如果我只是知道有一些企业的号码存在缺失,但不知道具体是哪个企业,又该如何编程呢?

7
steven_1017 发表于 2018-11-28 05:36:04
wat1231994 发表于 2018-11-26 20:08
嗯嗯,多谢了。那如果我只是知道有一些企业的号码存在缺失,但不知道具体是哪个企业,又该如何编程呢?
这个要看你对于这些缺失的号码具体干什么,假如不知道什么企业,就把那个company='a'这个condition去掉咯,因为它们的统一特征就是电话号码为missing,你明确了要干啥,就好办了,例如,假如是a公司,电话号码缺失,就用某号码替代,如果是b公司就用另一个号码替代。一定要知道自己要干什么,然后才知道如何去编程、拟定条件与执行语句。

8
wat1231994 发表于 2018-11-28 11:53:00
steven_1017 发表于 2018-11-28 05:36
这个要看你对于这些缺失的号码具体干什么,假如不知道什么企业,就把那个company='a'这个condition去掉咯 ...
因为这部分数据是海关数据  我想利用电话号码后七位和邮编   将海关数据与企业数据库进行匹配  所以需要将缺失的号码填充完整

9
steven_1017 发表于 2018-11-29 14:31:57
wat1231994 发表于 2018-11-28 11:53
因为这部分数据是海关数据  我想利用电话号码后七位和邮编   将海关数据与企业数据库进行匹配  所以需要将 ...
那就暂时让其保持missing,或者将电话号码为missing的所有obs单独存储一个data set,用那个dataset与数据库中的公司、电话的matching pair进行匹配,完成电话匹配的部分再append到大的数据集中。

10
wat1231994 发表于 2018-12-2 09:20:38
steven_1017 发表于 2018-11-29 14:31
那就暂时让其保持missing,或者将电话号码为missing的所有obs单独存储一个data set,用那个dataset与数据 ...
嗯嗯  懂了   多谢多谢

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-9 11:52