我正在學(xué)習(xí)sas,寫了一小段程序,在一個(gè)宏里面。具體情況這樣:我有一個(gè)數(shù)據(jù)集,需要做循環(huán)取出數(shù)據(jù)集中某些字段進(jìn)行后續(xù)的工作。但是取出的字段值要進(jìn)行比較,如果值相同則只使用數(shù)據(jù)集中的第一行取出的值,當(dāng)該比較的字段值不一致時(shí)又再使用從該行取出的值。
程序段如下:
%LET k=0;
%MACRO p_cl;
DATA _NULL_;
SET work.p_split;
CALL SYMPUT("k",_n_);
RUN;
%DO i=1 %TO %EVAL(&k.);/*數(shù)據(jù)集循環(huán)*/
%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;
…………
運(yùn)行后出現(xiàn)的問題是,比如說我頭3個(gè)觀測中,data_name的值都是一樣的,但是在if的判斷中,好像對&data_name.&m.^=&data_name.&n.的判斷并未生效,或者說整個(gè)判斷都未生效,該語句的后續(xù)將會(huì)重復(fù)執(zhí)行。
因?yàn)椴恢来嬖谑裁村e(cuò)誤,請高手不吝指教。謝謝
按我的設(shè)想當(dāng)?shù)?次循環(huán)管出的data_name和第一次一樣的時(shí)候,后續(xù)語句是不執(zhí)行的。