Hello,
I have been trying to figure out what I am doing wrong, but can't, so here I am posting the problem hoping someone can provide me some solution.
The Problem:
I have a IF statement within Do loop within DATA step. The IF statement evaluates by comparing Do loop index with a macro variable. Somehow the two values in comparison are not properly evaluated and thus, the codes always return ELSE values.
%macro TEMP();
%do i = 1 %to &Sample.;
%do j = 1 %to &DD.;
/*some codes*/
%let dsid = %sysfunc(open(TEMP_0));
%let CNT_0 = %sysfunc(attrn(&dsid,NOBS));
%let CC = %sysfunc(close(&dsid));
%let dsid = %sysfunc(open(TEMP_00));
%let CNT_00 = %sysfunc(attrn(&dsid,NOBS));
%let CC = %sysfunc(close(&dsid));
/*some codes*/
data TEMP_0_; set TEMP_0_;
data TEMP_0_; set TEMP_0_;
do k = 1 to &CNT_0.;
if k <= &CNT_00. then Rand = 1; /*k and CNT_oo comparison is not properly evaluated*/
else Rand = 0; /* thus Rand is always 0*/
end;
drop k;
run;
/*some codes*/
%mend TEMP;
Hello @JMES,
Your code is syntactically correct (assuming that the %ENDs for the two %DO loops are hidden in "some codes").
I cannot replicate your issue. When I tested it with appropriate datasets TEMP_0 and TEMP_00, variable RAND was set to 1.
The duplicate line "data TEMP_0_; set TEMP_0_;" is redundant. The second data step could be simplified as follows:
data TEMP_0_;
set TEMP_0_;
Rand=ifn(&CNT_0, &CNT_0 <= &CNT_00, .);
run;
Could you please provide small sample datasets (in the form of a data step) which demonstrate the issue?
I suppose this might happen if your second data set contains 0 observations. But you can make it easy to diagnose. Just add this before you run:
options symbolgen;
Then you will be able to see the values you are working with for your macro variables.
Thanks all.
I realized that the codes that I wrote are not doing what I wanted it to do.
I chaged the codes and working fine now.
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
Still thinking about your presentation idea? The submission deadline has been extended to Friday, Nov. 14, at 11:59 p.m. ET.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.