BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
km0927
Obsidian | Level 7

hello. i want to modify specific data, which doesn't have 'common key' in other dataset. in dataset 1, there are several '9' in YN column. if YN is 9 and doesn't have same key in dataset 2, it changes to '0'

 

dataset 1 is here.

 

Have 1
id key YN
1 20010305 0
1 20010408 9
1 20010510 9
1 20010511 0
2 20030309 9
2 20030408 9
2 20030607 9
2 20030715 0
3 20040913 9
3 20041011 0
3 20050205 0
3 20060305 9

 

and dataset 2 is here.

 

key
20010408
20030309
20040913

 

i want to make dataset 1 like this.


id key YN
1 20010305 0
1 20010408 9
1 20010510 0
1 20010511 0
2 20030309 9
2 20030408 0
2 20030607 0
2 20030715 0
3 20040913 9
3 20041011 0
3 20050205 0
3 20060305 0

 

i used 'proc sql', but the results is strange. there are 12 rows in dataset 1, but after trying proc sql, the rows are several times multiplied. i cant' find what was wrong.

 

proc sql;
create table want as
select a.*,
case when a.RN_KEY=b.RN_KEY then 9
else 0 end as YN1
from have 1 as a, (select RN_KEY from have 2) as b
drop YN
;quit;

 

in addition, i don't want to make additional column 'YN1'. I want to modify exisiting variable and don't want to use 'drop YN' statement. is there another way to preserve existing value?

1 ACCEPTED SOLUTION

Accepted Solutions
ChrisNZ
Tourmaline | Level 20

Like this?

proc sql;
select HAVE.ID
     , HAVE.KEY
     , ifn(key.KEY is null and YN=9,0,have.YN) as YN
from HAVE
left join KEY 
on have.KEY=key.KEY;
quit;

 

ID KEY YN
1 20010305 0
1 20010408 9
1 20010510 0
1 20010511 0
2 20030309 9
2 20030408 0
2 20030607 0
2 20030715 0
3 20040913 9
3 20041011 0
3 20050205 0
3 20060305 0

 

View solution in original post

1 REPLY 1
ChrisNZ
Tourmaline | Level 20

Like this?

proc sql;
select HAVE.ID
     , HAVE.KEY
     , ifn(key.KEY is null and YN=9,0,have.YN) as YN
from HAVE
left join KEY 
on have.KEY=key.KEY;
quit;

 

ID KEY YN
1 20010305 0
1 20010408 9
1 20010510 0
1 20010511 0
2 20030309 9
2 20030408 0
2 20030607 0
2 20030715 0
3 20040913 9
3 20041011 0
3 20050205 0
3 20060305 0

 

sas-innovate-2024.png

Available on demand!

Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.

 

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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 1 reply
  • 495 views
  • 1 like
  • 2 in conversation