BookmarkSubscribeRSS Feed
noda6003
Quartz | Level 8

I need to create a new flag with subjects which has first id as "Y" and atleast 1 flag later for same id as "Y"

In the below example i want to see if ecs=1 has flag1="Y" then create flag2="Y" for that id

data WORK.ADS;
infile datalines dsd truncover;
input ID:BEST12. ecs:BEST12. par:$8. flag1:$1.;
datalines4;
12,1,par1,Y
12,2,par1,Y
12,3,par1,Y
12,4,par2,Y
13,1,par1,
13,2,par1,Y
13,3,par1,N
13,4,par2,Y
14,1,par1,N
;;;;

 

the output i need to get is falg2="Y" for id 12,14 and flag2="N" for 13

 

any help

 

4 REPLIES 4
PeterClemmensen
Tourmaline | Level 20

Why would flag2="Y" for ID=14? It does not have Flag1="Y" for the first obs in the ID? Or later for that matter

noda6003
Quartz | Level 8

orry, it should not be Y. my mistake

PeterClemmensen
Tourmaline | Level 20

No problem. Given you have your ecs variable as in your sample data, you can do this

 

data want;
    if _N_=1 then do;
        declare hash h1(dataset:"ads(where=(ecs=1 & flag1='Y'))");
        h1.definekey('ID');
        h1.definedone();
        declare hash h2(dataset:"ads(where=(ecs ne 1 & flag1='Y'))");
        h2.definekey('ID');
        h2.definedone();
    end;

    set ads;

    if h1.check()=0 & h2.check()=0 then flag2='Y';
                                   else flag2='N';
run;
PeterClemmensen
Tourmaline | Level 20

Here is a non hash approach that does not depend on the ecs variable, but requires that your data is sorted by ID

 

data want;
    do until (last.ID);
        set ads;
        by ID;
        if first.ID then _iorc_=ifn(flag1='Y', 1, 0);
        if first.ID ne 1 & _iorc_=1 & flag1='Y' then flag2='Y';
        else                                         flag2='N';
    end;
    do until (last.ID);
        set ads;
        by ID;
        output;
    end;
run;

 

Result:

 

ID  ecs par   flag1  flag2
12  1   par1  Y      Y
12  2   par1  Y      Y
12  3   par1  Y      Y
12  4   par2  Y      Y
13  1   par1         N
13  2   par1  Y      N
13  3   par1  N      N
13  4   par2  Y      N
14  1   par1  N      N

 

sas-innovate-2026-white.png



April 27 – 30 | Gaylord Texan | Grapevine, Texas

Registration is open

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!

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
  • 4 replies
  • 999 views
  • 0 likes
  • 2 in conversation