|
|
楼主

楼主 |
发表于 2009-6-26 10:42:48
|
只看该作者
简单的macro程序出现问题,还望大家指点
代码:
data varlist;
length var $ 10;
input var $ @@;
cards;
extc010010 extc010020 extc030020 extc030040
;
run;
data _null_;
set varlist end=last;
call symput('varname_'||compress(_n_),var);
if last then call symput('nvar',compress(_n_));
run;
data test; *将数据集中大于2的值通通设为1
set sasuser.dataset;
%macro t;
%do i=1 %to &nvar;
%if &&varname_&i>2 %then &&varname_&i=1;
%else &&varname_&i=0;
%end;
%mend t;
%t;
run;
dataset数据集如下:
extc010010 extc010020 extc030020 extc030040
19 0 0 11
0 5 7 0
运行结果:
data test;
604 set sasuser.dataset;
605 %macro t;
606 %do i=1 %to &nvar;
607 %if &&varname_&i>2 %then &&varname_&i=1;
608 %else &&varname_&i=0;
609 %end;
610 %mend t;
611 %t;
NOTE: 由宏变量“VARNAME_2”生成行。
1 extc010020
----------
22
NOTE: 由宏变量“VARNAME_3”生成行。
1 extc030020
----------
22
NOTE: 由宏变量“VARNAME_4”生成行。
1 extc030040
----------
22
ERROR 22-322: 语法错误,期望下列之一: !, !!, &, *, **, +, -, /, ;, <, <=, <>, =, >, ><, >=, AND, EQ, GE, GT, IN, LE,
LT, MAX, MIN, NE, NG, NL, NOTIN, OR, ^=, |, ||, ~=.
612 run;
NOTE: SAS 系统由于错误而停止了该步的处理。
WARNING: 数据集 WORK.TEST 可能不完整。该步停止时,共有 0 个观测和 4 个变量。
WARNING: 数据集 WORK.TEST 由于该步已停止,而没有被替换。
NOTE: “DATA 语句”所用时间(总处理时间):
实际时间 0.07 秒
CPU 时间 0.00 秒 |
|