Here's my code, I simplified my problem as this:     %macro checkrow(dsname);  %let dsid=%sysfunc(open(&dsname));  %let countrow=%sysfunc(attrn(&dsid,nlobs));  %let rc=%sysfunc(close(&dsid));  &countrow  %mend checkrow;    data t1;  input a b $;  datalines;  1 a  2 b  ;  run;    %put %checkrow(t1);     %macro t2;  data t1;  set t1 t1;  run;  %put %checkrow(t1);  %mend t2;     data _null_;  do i = 0 to 3;  call execute('%t2');  end;  run;     the macro checkrow is used to check how many rows in a dataset and it works well. But here's the problem  Every iteration in the data_null_, the row of dataset t1 is doubled, so my expectation is   2  2  4  8  16  But the output is   2  2  2  2  2  although the actual t2 rows are already 16  Could anyone tell me why? Why the %checkrow(t2) don't work here? 
						
					
					... View more