请选择 进入手机版 | 继续访问电脑版
楼主: sbyanshuai
1984 3

[实际应用] 请问如何用宏批量根据某变量求和 [推广有奖]

  • 0关注
  • 0粉丝

初中生

42%

还不是VIP/贵宾

-

威望
0
论坛币
11 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
42 点
帖子
5
精华
0
在线时间
25 小时
注册时间
2014-6-26
最后登录
2019-3-19

sbyanshuai 学生认证  发表于 2018-3-1 08:16:03 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
您好,我有1000个数据集,每个数据集的名字都无规则,但是内容都差不多,每个数据集大概像这样
data have ;inputYEAR SALE ID $5.;datalines;2001  12  ab342001  10  12342001  14  ab342001  10  22342002  10  12342002  10  ab342002  10  22342002  10  22342001  12  ab342001  10  12342001  14  22342001  10  22342002  10  ab342002  10  12342002  10  ab342002  10  2234;run;

我想求的是,如果同一年中,把所有ID以字母开头的SALE相加求和
这样的步骤我知道用sql可以实现,可是该怎么重复到1000个数据集上啊?因为每个数据集名称都不规则,所以不知道宏该怎么写QAQ
谢谢了



二维码

扫码加我 拉你入群

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

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


xiami2000 在职认证  发表于 2018-3-2 00:52:55 |显示全部楼层 |坛友微信交流群
Check the sample here:
http://support.sas.com/kb/48/810.html

use PROC content to get all dataset names out, then use macro loop to do your data summary for all datasets.
已有 1 人评分论坛币 收起 理由
admin_kefu + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

使用道具

cashes93 发表于 2018-3-2 08:27:34 来自手机 |显示全部楼层 |坛友微信交流群
sbyanshuai 发表于 2018-3-1 08:16
您好,我有1000个数据集,每个数据集的名字都无规则,但是内容都差不多,每个数据集大概像这样
data have  ...
利用数据字典,获取数据名称,赋值给宏变量,做循环,可参考此文中http://mp.weixin.qq.com/s/1vL9KmBx4ymDIxrO3NcGVw
已有 1 人评分论坛币 收起 理由
admin_kefu + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

使用道具

sbyanshuai 学生认证  发表于 2018-3-3 03:38:51 |显示全部楼层 |坛友微信交流群
谢谢楼上两位,我刚发完这个帖子就琢磨出来了。
  1. data have ;
  2. input
  3. YEAR SALE ID $5.;
  4. datalines;2001  12  ab34
  5. 2001  10  1234
  6. 2001  14  ab34
  7. 2001  10  2234
  8. 2002  10  1234
  9. 2002  10  ab34
  10. 2002  10  2234
  11. 2002  10  2234
  12. 2001  12  ab34
  13. 2001  10  1234
  14. 2001  14  2234
  15. 2001  10  2234
  16. 2002  10  ab34
  17. 2002  10  1234
  18. 2002  10  ab34
  19. 2002  10  2234;
  20. run;
复制代码

%macro doit(memname);
proc sql;
create table want.&memname as
select YEAR,
    sum(SALE*anyalpha(first(ID))) as SALE1,
    sum(SALE) as TOTALSALE,
from have.&memname
group by YEAR;
quit;
%mend doit;

data _null_;
set work.member;      /* this is a list I created before hand, it contains all the member name of the datasets I have*/
call execute('%doit('!!memname!!');');
run;这是我的代码。可能最后不太准确,不过反正得到我想要的了。谢谢大家

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-29 06:23