BookmarkSubscribeRSS Feed
JMES
Calcite | Level 5

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;

 

3 REPLIES 3
FreelanceReinh
Jade | Level 19

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?

 

 

 

Astounding
PROC Star

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.

JMES
Calcite | Level 5

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.

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

How to Concatenate Values

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 3 replies
  • 1349 views
  • 0 likes
  • 3 in conversation