楼主: 冰棱
1262 9

有一个关于宏的问题 [推广有奖]

  • 0关注
  • 1粉丝

硕士生

21%

还不是VIP/贵宾

-

威望
0
论坛币
344 个
通用积分
0
学术水平
1 点
热心指数
1 点
信用等级
1 点
经验
1995 点
帖子
107
精华
0
在线时间
118 小时
注册时间
2006-2-27
最后登录
2018-6-15

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
首先呢,我的表是这样的
国家 省份 市区 县 村  年份 月份 数据1 数据2 数据3 数据4 ......

前面的分类变量是从国家一直到村,也就是5个,我要分别求各个分类变量每月的汇总数据

所以我想到了宏
大致的意思是,

proc sql;
   create table &name as
   select 年份,月份,&na,sum......
   from ....
   group by ......;
quit;

现在就是name 和 na的赋值方面搞了好多都成功不了
主要卡在了,如果给宏变量赋字符串,它不能把它当做变量名来识别,会出一个新的变量,内容就是赋的字符串的内容

也试了数组的循环,仍然不行,难道没有更好的方法了吗?

求解~
二维码

扫码加我 拉你入群

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

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

关键词:proc sql Create Select Group Elect

回帖推荐

huangpengfei 发表于8楼  查看完整内容

以sashelp.class为例,你看是你需要的吗? proc contents data=sashelp.class out=class(keep=name where=(name not in("Height","Weight"))) noprint; run; proc sql; select count(name) into:n from class ; select Name into:name1-:name%left(&n) from class ; quit; %macro sum(); %do i=1 %to &n; proc sql; select &&name&i,sum(height) as sum_h from sashelp.cla ...

Tigflanker 发表于4楼  查看完整内容

应该会有更好的求合计的办法,这个宏只是解决你指的那个问题的
沙发
ljw5122 发表于 2015-9-5 20:35:37 |只看作者 |坛友微信交流群
为什么不用proc means?
data test;
        input cl $ c2 $ c3 $ c4 $ c5 $ num1 num2;
        datalines;
        A1 B1 C1 D1 E1 56 89
        A1 B1 C1 D2 E2 56 89
        A1 B2 C2 D2 E2 56 89
        A2 B2 C1 D1 E2 56 89
        ;
run;

proc means data = work.test n mean ;
        var num1;
        class cl;
run;


proc means data = work.test n mean ;
        var num1;
        class c2;
run;

使用道具

藤椅
teqel 发表于 2015-9-5 21:35:16 来自手机 |只看作者 |坛友微信交流群
你怎么赋值的?

使用道具

板凳
Tigflanker 发表于 2015-9-6 09:03:35 |只看作者 |坛友微信交流群
  1. %macro a;
  2. %let x = a s d f;
  3. %let group =;

  4. %do i = 1 %to 4;
  5.   %let group = &group. %sysfunc(ifc(%length(&group.),%bquote(,),)) %scan(&x., &i.);
  6.   %put &group.;
  7. %end;
  8. %mend;
  9. %a;
复制代码
应该会有更好的求合计的办法,这个宏只是解决你指的那个问题的

使用道具

报纸
冰棱 发表于 2015-9-6 11:35:56 |只看作者 |坛友微信交流群
ljw5122 发表于 2015-9-5 20:35
为什么不用proc means?
data test;
        input cl $ c2 $ c3 $ c4 $ c5 $ num1 num2;
是可以,但是每个变量的的汇总方式不一样,有的是计数,有的是按条件汇总,有的是求和,所以没用这个,不是一样的。

使用道具

地板
冰棱 发表于 2015-9-6 11:42:56 |只看作者 |坛友微信交流群
teqel 发表于 2015-9-5 21:35
你怎么赋值的?
在sql中只是有几个语句涉及到比如:
select ^
group by ^
共同有的字段都放好,不同的字段用值来赋;
比如省份的
%let name=国家,省份;

然后在上面两个语句中,就  &name. 加上就行了

使用道具

7
冰棱 发表于 2015-9-6 13:24:52 |只看作者 |坛友微信交流群
Tigflanker 发表于 2015-9-6 09:03
应该会有更好的求合计的办法,这个宏只是解决你指的那个问题的
可以,成功了!

使用道具

8
huangpengfei 发表于 2015-9-6 15:23:30 |只看作者 |坛友微信交流群

以sashelp.class为例,你看是你需要的吗?

proc contents data=sashelp.class
                                out=class(keep=name where=(name not in("Height","Weight"))) noprint;
run;

proc sql;
        select count(name)
                into:n
                from class
        ;
        select Name
                into:name1-:name%left(&n)
                from class
        ;
quit;

%macro sum();
        %do i=1 %to &n;
                proc sql;
                        select &&name&i,sum(height) as sum_h
                                from sashelp.class
                                group by &&name&i
                        ;
                quit;
        %end;
%mend;
%sum;

使用道具

9
冰棱 发表于 2015-9-7 22:05:35 |只看作者 |坛友微信交流群
huangpengfei 发表于 2015-9-6 15:23
以sashelp.class为例,你看是你需要的吗?

proc contents data=sashelp.class
有点这个意思,大概研究一下~~

使用道具

10
冰棱 发表于 2015-9-13 20:50:47 |只看作者 |坛友微信交流群
huangpengfei 发表于 2015-9-6 15:23
以sashelp.class为例,你看是你需要的吗?

proc contents data=sashelp.class
研究完毕,确实可以,多谢!!

使用道具

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

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

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

GMT+8, 2024-4-25 17:35