全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1144 4
2011-11-08
data a;
input tstart date10. tend date10. huoqi;
datalines;
10JUN1999 21FEB2002 1
21FEB2002 29OCT2004 2
29OCT2004 19AUG2006 4
;
run;                                /*建立数据集a*/


data ding200(keep=x y z );                  
x=100000;
a='23feb2000'd;
b='23mar2000'd;
d1=12*yrdif(a,b,'act/act'); /*a,b实际相差的月数*/
d2=datdif(a,b,'act/act');    /*a,b实际相差的天数*/
set a;
%macro tiqian(x1);
    %if x=&x1 %then %do;
    if tstart< b <=tend then do;
       y=x*d5*huoqi/360/100;z=x+y;output;end;
    %end;

  %else  %if &x1<x %then %do;
     if tstart< b <=tend then do;
       y=%eval(&x1*d2*huoqi/360/100);
          z=x+y;
     if tstart< a<=tend then do;
       y=%eval(x-&x1*d1*huoqi/12/100);    /*我想弄出x1的值进行运算*/            
       z=z+y;output;end;
     end;
     %end;
     %mend tiqian;
     %tiqian(100000);
     run;
我在上面建立一个关于x1的宏参数,上面标红的应该就是我出错的地方,只是不知道怎么改才是正确的。希望大家帮帮忙呀!!!
二维码

扫码加我 拉你入群

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

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

全部回复
2011-11-8 23:10:01
你能直接说你要干嘛么?

就语法而言:
%if后面 &x1->%sysevalf(&x1*1.0)
再后面的%eval直接去掉吧。。。
二维码

扫码加我 拉你入群

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

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

2011-11-8 23:26:01
学习SAS中!
二维码

扫码加我 拉你入群

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

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

2011-11-9 09:15:35
%EVAL是在对宏变量进行数值运算时才用到
比如 %let a=%EVAL(&b+&c);
你这里用不到
你这里的x,y,z都只是表中的变量而已,不是宏变量
我看你这个程序是算存完活期后的本金和利息和?
如果是这样的话,程序可以改写下
二维码

扫码加我 拉你入群

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

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

2011-11-9 13:37:49
playmore 发表于 2011-11-9 09:15
%EVAL是在对宏变量进行数值运算时才用到
比如 %let a=%EVAL(&b+&c);
你这里用不到
不知道可以怎样改一下?
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群