作者imaltar (..)
站内Statistics
标题Re: [程式] SAS巨集问题
时间Thu Jun 20 23:24:15 2013
※ 引述《a88241050 (再回头已是百残身)》之铭言:
: [软体程式类别]:SAS
: [程式问题]:资料处理
: [软体熟悉度]:中
: [问题叙述]:昨天考的一题,写出一个巨集程式,把输入的钱数换成钱的张数
: EX:输入487 跑出"领出487元,换得100元4张,50元1张,10元3张,5元1张,1元2张
: [程式范例]:
: %MACRO test(money);
: DATA final;
: N=&money;
: RUN;
: DATA final2;
: SET final;
: a=INT(N/100);
: b=INT((N-100*a)/50);
: c=INT((N-100*a-50*b)/10);
: d=INT((N-100*a-50*b-10*c)/5);
: e=N-100*a-50*b-10*c-5*d;
: LABEL N='领出钱数' a='100元张数' b='50元张数' c='10元张数' d='5元张数' e='1元
: 张数';
: RUN;
: PROC PRINT DATA=final2 LABEL;
: TITLE"领出 &&money 元,换得100元 &a 张,50元 &b 张,10元 &c 张,5元 &d 张,1元 &e
: 张";
: RUN;
: %MEND;
: %test(487)
: 执行结果:
: 领出 487 元,换得100元 &a 张,50元 &b 张,10元 &c 张,5元 &d 张,1元 &e 张
: Obs 领出钱数 100元张数 50元张数 10元张数 5元张数 1元张数
: 1 487 4 1 3 1 2
: 我现在问题是a,b,c,d,e不是巨集变数,所以标题的张数不会随着输入的N值变动
: 可是a,b,c,d,e是由N所产生的,不知道怎麽把他弄到巨集里
: 因为刚学巨集,有些指令还不太熟,希望有人能指点一下,3Q
%MACRO test(money);
DATA final;
N=&money;
RUN;
DATA final2;
SET final;
a=INT(N/100);
b=INT((N-100*a)/50);
c=INT((N-100*a-50*b)/10);
d=INT((N-100*a-50*b-10*c)/5);
e=N-100*a-50*b-10*c-5*d;
call symput('a',compress(a));
call symput('b',compress(b));
call symput('c',compress(c));
call symput('d',compress(d));
call symput('e',compress(e));
LABEL N='领出钱数' a='100元张数' b='50元张数' c='10元张数' d='5元张数' e='1元张数';
RUN;
PROC PRINT DATA=final2 LABEL;
TITLE"领出 &&money 元,换得100元 &a 张,50元 &b 张,10元 &c 张,5元 &d 张,1元 &e 张";
RUN;
%MEND;
%test(487)
用call symput产生 a b c d e的macro variable便可~~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.228.18.11
1F:→ a88241050:作出来了,3Q 06/21 12:29