1776 1

SAS程序查找错误 [推广有奖]

  • 8关注
  • 2粉丝

讲师

33%

还不是VIP/贵宾

-

威望
0
论坛币
310 个
通用积分
0
学术水平
1 点
热心指数
1 点
信用等级
0 点
经验
15111 点
帖子
218
精华
0
在线时间
379 小时
注册时间
2012-10-31
最后登录
2020-8-31

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
libname DATA 'c:\SASDATA';
proc printto log=_null_; run;
data data.ab;
  a=-0.618;
  b=1.618;
  v=1+a*a;
  u=1+(1-a)**2;
  t=1+b*b;
  s=1+(b-1)**2;
  la=2*log(v/u);
  lb=2*log(t/s);
  c=la/log(1+a*a);
  d=lb/log(1+b*b);
  keep c d;
run;
proc fcmp outlib=sasuser.funcs.math_stat;
  # not clear to me how it works
  function lstar(u,c,d);
    if (u le  -0.618) then return (c*log(1+u*u));
    if (u ge   1.618) then return (d*log(1+u*u));
      else  return(2*log((1+u*u)/(1+(u-1)*(u-1))));
  endsub;
  function g(u);
    if (u le  -0.25) then return (2*log((1+0.25*0.25)/(1+1.25*1.25)));
    if (u ge   1.25) then return (2*log((1+1.25*1.25)/(1+0.25*0.25)));
      else return(2*log((1+u*u)/(1+(u-1)*(u-1))));
endsub;
run;
options cmplib =sasuser.funcs;
%let r =10000;
data data.lstar;
  call streaminit(1234); # for reproduce results
  set ab;
  do sample =1 to &r;
    call missing(sum1, sum2);
    do i =1 to 2000;
      x     =rand('T',3)  ;
      y     =x/sqrt(3)    ;
      lstar =lstar(y,c,d) ;
      l     =g(y)         ;
      sum1 ++lstar; sum2 ++l;
      if (sum1 lt 0) then sum1=0;
      if (sum2 lt 0) then sum2=0;
      output;
    end;
  end;
  keep sample i sum1 sum2;
run;
data shifts_drifts;
  set data.lstar;
  by sample;
  array _n[10] _temporary_ (1 2 3 4 5 6 7 8 9 10);
  array _s[10] _temporary_;  array _d[10] _temporary_;
  if first.sample then call missing(of _s
  • _d
  • );
      do k =1 to dim(_n);
        if _s[k] <1 then if (sum1 ge (2.01+0.01*(_n[k]-1))) then do;
          _s[k] =1; n =_n[k]; cat ='shifts';
          output shifts_drifts(keep =sample n i cat);
        end;
        if _d[k] <1 then if (sum2 ge (2.01+0.01*(_n[k]-1))) then do;
          _d[k] =1; n =_n[k]; cat ='drifts';
          output shifts_drifts(keep =sample n i cat);
        end;
      end;
    run;
    proc means data=shifts_drifts;
      class n cat;
      var i;
      output out=ci_shifts_drifts(drop =_freq_ _type_) mean=ARL_sARL;
    run;

    上面的程序出现错误,SAS运行后出现下面结果,求帮忙

    309    do k =1 to dim(_n);
    310
    311      if _s[k] <1 then if (sum1 ge (2.01+0.01*(_n[k]-1))) then do;
    312        _s[k] =1; n =_n[k]; cat ='shifts';
    313        output shifts_drifts(keep =sample n i cat);
                                   -
                                   22
                                   76
    ERROR 22-322: 语法错误,期望下列之一: 名称, 带引号的字符串, ;, RC, _DATA_, _LAST_, _NULL_.

    ERROR 76-322: 语法错误,语句将被忽略。

    314      end;

  • 二维码

    扫码加我 拉你入群

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

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

    关键词:sas程序 TEMPORARY function sasuser missing function return null

    沙发
    pobel 在职认证  发表于 2013-4-4 10:58:37 |只看作者 |坛友微信交流群
    OUTPUT 语句中的数据集名字后不能跟数据集选项。
    313行应该是 output shifts_drifts;

    如果楼主只想keep某几个变量,可以在DATA句的数据集名字后加keep=选项,或使用KEEP语句
    已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
    webgu + 10 + 10 + 1 + 1 + 1 容易和ods output混淆。

    总评分: 经验 + 10  论坛币 + 10  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

    和谐拯救危机

    使用道具

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

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

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

    GMT+8, 2024-4-28 13:23