全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
8664 4
2014-10-19
悬赏 5 个论坛币 已解决
小弱需要编一段程序,大概是要把已经分好的25组数据(先按size再按BM)分别计算超额收益率,但程序涉及到宏本人实在无法驾驭,不知道论坛上有没有大神可以帮忙?
程序如下:
%macro _group;
%do np1=0 %to 4;
  %do np2=0 %to 4;
  data _G&np1.&np2.;
  set work.result00;
  where(r_cvalue=&np1. r_bm=&np2.);
  run;
  Proc univariate data=_G&np1.&np2.;
  var return;
  weight cvalue;
  output out=nRe&np1.&np2. mean=nReturn&np1.&np2.;
  run;
  %macro minter;
  data _null&np1.&np2.;
  set nRe&np1.&np2.;
  call symput('nRetern&np1.&np2.',nReturn&np1.&np2.);
  run;
  %mend minter;
  %minter
  data work._1G&np1.&np2.;
  set work._G&np1.&np2.;
  return=return-%sysevalf(&nReturnn&np1.&np2.);
  run;
  %end;
%End;
%mend _group;
%_group


返回的日志如下:
22: 无法确定 LINE 和 COLUMN。
NOTE 242-205: NOSPOOL 已打开。用 OPTION SPOOL 重新运行可恢复出错的 LINE 和 COLUMN。
ERROR 22-322: 语法错误,期望下列之一: !, !!, &, *, **, +, -, /, <, <=, <>, =, >, >=, AND, EQ, GE, GT, LE, LT, NE, OR, ^=, |, ||,
              ~=.
76: 无法确定 LINE 和 COLUMN。
NOTE: NOSPOOL 已打开。用 OPTION SPOOL 重新运行可恢复出错的 LINE 和 COLUMN。
ERROR 76-322: 语法错误,语句将被忽略。
ERROR: 解析 WHERE 子句时出现语法错误。

NOTE: SAS 系统由于错误而停止了该步的处理。
WARNING: 数据集 WORK._G00 可能不完整。该步停止时,共有 0 个观测和 10 个变量。
WARNING: 数据集 WORK._G00 由于该步已停止,而没有被替换。




WARNING: 没有解析符号引用 NRETURNN。
22: 无法确定 LINE 和 COLUMN。
NOTE 242-205: NOSPOOL 已打开。用 OPTION SPOOL 重新运行可恢复出错的 LINE 和 COLUMN。
ERROR 22-322: 语法错误,期望下列之一: 名称, 带引号的字符串, 数值常数, 日期时间常数, 缺失值, INPUT, PUT.
WARNING: 没有解析符号引用 NRETURNN00。
ERROR: 在需要数值操作数的 %EVAL 函数或 %IF 条件中发现字符操作数。条件是: &nReturnn00

NOTE: SAS 系统由于错误而停止了该步的处理。
WARNING: 数据集 WORK._1G00 可能不完整。该步停止时,共有 0 个观测和 10 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          0.01 秒
      CPU 时间          0.00 秒


ERROR: 宏 _GROUP 将终止执行。


以上,提前谢过各位!
二维码

扫码加我 拉你入群

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

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

全部回复
2014-10-19 15:20:14
复制代码
二维码

扫码加我 拉你入群

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

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

2014-10-19 15:22:11
附一个正在处理的数据文件,需要的可以用这个数据
二维码

扫码加我 拉你入群

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

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

2014-10-21 16:50:24
mingfeng07 发表于 2014-10-19 18:03
我之前的逻辑什么的没问题,就是基础语言不过关,用你改过的程序一下就ok了,谢谢你!
看了你的程序,我想请教一下。我看到你把我之前用的第二个宏(%minter)删掉了,两个宏不可以这样使用吗?
另外,symput和symputx有什么区别呢?直接用return=return-sysevalif(...)不可以吗?
二维码

扫码加我 拉你入群

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

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

2014-10-22 10:48:44
charlesqian 发表于 2014-10-21 16:50
我之前的逻辑什么的没问题,就是基础语言不过关,用你改过的程序一下就ok了,谢谢你!
看了你的程序,我 ...
第一个问题:两个宏可以这样使用,但是在一个宏里,既然是正常顺序下使用的话,就没有必要再增加宏了。
第二个问题:symputx在创建宏变量的前提下,会自动消除前后多余的空格,相当于加了一个compress()函数的功能。
第三个问题:sysevalf()这个函数是用于进行逻辑运算的,而此题中是解析宏变量,所以没有必要。
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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