楼主: seanopry
1919 4

[问答] sas宏出错 [推广有奖]

  • 1关注
  • 11粉丝

硕士生

70%

还不是VIP/贵宾

-

威望
0
论坛币
104 个
通用积分
2.9879
学术水平
6 点
热心指数
8 点
信用等级
6 点
经验
500 点
帖子
35
精华
0
在线时间
344 小时
注册时间
2016-1-1
最后登录
2024-3-14

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
各位大神,可以看一下我的程序哪里出错了吗?谢谢。并且如何修改?我已经精疲力尽了···


%macro reg(code);
   data a1;
  set newall;
  if &code=code;
  run;

    data a1;
    set a1;
    num=totobs;
   %do i=1 %to (&num-60);
    if  (&num-&i)=60 then do;
     proc reg data=a1 outest=results noprint;
     model wkret=ret;
            end;
  %end;
  %do i= (&num-59) %to #
    if  (&num-&i)>30 and  (&num-&i)<60 then do;
     proc reg data=a1 outest=results noprint;
     model wkret=ret;
    end;
   
  %end;
  run;
%mend reg;





WARNING: 没有解析符号引用 NUM。
ERROR: 在需要数值操作数的 %EVAL 函数或 %IF 条件中发现字符操作数。条件是: (&num-60)
ERROR: %TO 值(%DO I 循环中)无效。
ERROR: 宏 REG 将终止执行。









二维码

扫码加我 拉你入群

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

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

关键词:SAS宏 results outest Result model

沙发
dogmamongo 发表于 2017-3-11 15:35:01 |只看作者 |坛友微信交流群
没有&num
你设多少?
这应该是移动窗口回归吧
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
seanopry + 5 + 5 + 5 热心帮助其他会员

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

使用道具

藤椅
luomingming1234 发表于 2017-3-12 11:29:33 来自手机 |只看作者 |坛友微信交流群
seanopry 发表于 2017-3-11 13:04
各位大神,可以看一下我的程序哪里出错了吗?谢谢。并且如何修改?我已经精疲力尽了···


你写的num那一行不对,你的意思是设立一个宏变量num等于数据集的总数,应该改为%let num=nobs,

使用道具

板凳
renjingli2011 发表于 2017-3-13 14:51:17 |只看作者 |坛友微信交流群
ERROR: 在需要数值操作数的 %EVAL 函数或 %IF 条件中发现字符操作数。条件是: (&num-60):%eval(&num-60),宏过程里的运算整数的可以用%eval()有小数位的可以用%sysevalf();
宏变量设置可以用%let;
宏程序里不在data 步中的if then 语句最好加上%。

使用道具

报纸
seanopry 发表于 2017-3-14 00:07:38 |只看作者 |坛友微信交流群
谢谢各位,我的问题已经解决。
%macro reg;
                 data s1;
                 set try;
                %do i=1 %to 514;
                        data a2;
                        set s1;
                        if d1>=&i and d1<=&i+60 and ret^=. and wkret^=.;/*删去无效值*/
                        run;
                        proc reg data=a2 outest=results noprint;
                        model ret=wkret;
                        by code;
                    run;
                        data results;
                        set results;
                        d1=&i+60; /*从第61个开始输出值*/
                        beta=wkret;
                        keep  code d1 beta;
            run;
                        data try;
                        merge try(in=a) results;
                        by code d1;
                        if a;
                        run;
                       
                 %end;
               
       
%mend reg;
%reg

使用道具

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

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

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

GMT+8, 2024-4-20 10:46