我正在学习sas,写了一小段程序,在一个宏里面。具体情况这样:我有一个数据集,需要做循环取出数据集中某些字段进行后续的工作。但是取出的字段值要进行比较,如果值相同则只使用数据集中的第一行取出的值,当该比较的字段值不一致时又再使用从该行取出的值。
程序段如下:
%LET k=0;
%MACRO p_cl;
DATA _NULL_;
SET work.p_split;
CALL SYMPUT("k",_n_);
RUN;
%DO i=1 %TO %EVAL(&k.);/*数据集循环*/
%let m=&i.;
%let n=%EVAL(&i.-1);
DATA _NULL_;
SET work.P_split(obs=&i.);
CALL SYMPUT("lib_name",compress(libname));
CALL SYMPUT("data_name",compress(memname));
CALL SYMPUT("name",compress(name));
RUN;
%let data_name&m.=&data_name.;
%if %EVAL(&m.)='1' or (&data_name.&m.^=&data_name.&n.) %then %do;
…………
运行后出现的问题是,比如说我头3个观测中,data_name的值都是一样的,但是在if的判断中,好像对&data_name.&m.^=&data_name.&n.的判断并未生效,或者说整个判断都未生效,该语句的后续将会重复执行。
因为不知道存在什么错误,请高手不吝指教。谢谢
按我的设想当第2次循环管出的data_name和第一次一样的时候,后续语句是不执行的。