楼主: zhanxu
4075 4

[原创博文] 宏函数求助 [推广有奖]

  • 0关注
  • 0粉丝

初中生

95%

还不是VIP/贵宾

-

威望
0
论坛币
14 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
48 点
帖子
7
精华
0
在线时间
34 小时
注册时间
2010-4-21
最后登录
2011-11-25

楼主
zhanxu 发表于 2010-4-29 17:27:13 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我现在编了一段宏函数,然后想调用宏函数,结果老是出错~求高手指教。
%macro sort;
proc sql;
select dcode,state,province
,AVG(A1) AS CSIA01     /*A1平均值*/
,AVG(A2) AS CSIA02     /*A2平均值*/
,AVG(A3) AS CSIA03     /*A3平均值*/
,AVG(B1) AS CSIB01     /*B1平均值*/
,AVG(B2) AS CSIB02     /*B2平均值*/
,AVG(B3) AS CSIB03     /*B3平均值*/
,AVG(C1) AS CSIC01     /*C1平均值*/
,AVG(C2) AS CSIC02     /*C2平均值*/
,AVG(C3) AS CSIC03     /*C3平均值*/
,AVG(C4) AS CSIC04     /*C4平均值*/
,AVG(D1) AS CSID01     /*D1平均值*/
,AVG(D2) AS CSID02     /*D2平均值*/
,AVG(D3) AS CSID03     /*D3平均值*/
,AVG(E1) AS CSIE01     /*E1平均值*/
,AVG(E2) AS CSIE02     /*E2平均值*/
,AVG(E3) AS CSIE03     /*E3平均值*/
,CSIA01*0.315+CSIA02*0.282+CSIA03*0.403 AS CSIA00        /*A1-A3加权平均*/
,CSIB01*0.294+CSIB02*0.340+CSIB03*0.366 AS CSIB00        /*B1-B3加权平均*/
,CSIC01*0.209+CSIC02*0.189+CSIC03*243+CSIC04*0.358 AS CSIC00             /*C1-C4加权平均*/
,CSID01*0.322+CSID02*0.312+CSID03*0.367 AS CSID00                        /*D1-D3加权平均*/
,CSIE01*0.288+CSIE02*0.336+CSIE03*0.376 AS CSIE00                        /*E1-E3加权平均*/
from lib.qirui2010csi
GROUP BY dcode,state,province;
quit;
%mend;

proc sql;
SELECT %sort  FROM merge1
WHERE state="西南";
quit;
错误老是显示:
1      proc sql;
            ---
            79
ERROR 79-322: 期望‘FROM’。
ERROR: 以下这些列在起作用的表中没有找到: CSIA01, CSIA02, CSIA03, CSIB01, CSIB02, CSIB03, CSIC01, CSIC02,
       CSIC03, CSIC04, CSID01, CSID02, CSID03, CSIE01, CSIE02, CSIE03, dcode, province, state.
难道我必须先设定这些变量?求高手帮忙~~~
二维码

扫码加我 拉你入群

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

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

关键词:宏函数 province proc sql Select State 平均值

沙发
crackman 发表于 2010-4-29 17:32:56
你这个宏程序错误太多了
第一个就是你的计算变量在第二次计算的时候要加CALCULATED
你引用宏的方式都是错误的

藤椅
zhanxu 发表于 2010-4-29 17:37:51
2# crackman
引用宏错误?不是%sort么?求大侠你指教改进~~~

板凳
jingju11 发表于 2010-4-29 20:48:05
3# zhanxu

macro解析之后的code类似于:

proc sql;
proc sql;
select .....from **group by ***; from merge1 where = '**';
quit;

失去你所以为的逻辑,显然是错误的。我觉得没有必要用宏
已有 1 人评分热心指数 收起 理由
crackman + 1 呵呵 用DATA步来做就可以了

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

报纸
zhanxu 发表于 2010-5-1 14:45:06
4# jingju11
那用什么啊~求指教~~

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 06:07