Dear experts,
assuming the following data set "have":
data have0;
country="BU"; output;
country="JP"; output;
country="US"; output;
run;
data have1;
value_list="US_ UK _JP NW"; output;
value_list="US_ UK _JP NW"; output;
value_list="US_ UK _JP NW"; output;
run;
data have; merge have0 have1 ;run;
I would like to obtain the following one:
data want
country="BU"; output;
run;
which is the most short, understandable and elegant way?
Please try this.
data want(keep=country);
set have;
if not find(strip(value_list),strip(country));
run;
Please try this.
data want(keep=country);
set have;
if not find(strip(value_list),strip(country));
run;
HAVE
data have0;
country="BU"; output;
country="JP"; output;
country="US"; output;
run;
/*
Up to 40 obs WORK.HAVE0 total obs=3
Obs COUNTRY
1 BU
2 JP
3 US
*/
data have1;
value_list="US_ UK _JP NW"; output;
value_list="US_ UK _JP NW"; output;
value_list="US_ UK _JP NW"; output;
run;
/*
Up to 40 obs WORK.HAVE1 total obs=3
Obs VALUE_LIST
1 US_ UK _JP NW
2 US_ UK _JP NW
3 US_ UK _JP NW
*/
WANT
Up to 40 obs WORK.WANT total obs=1
Obs COUNTRY
1 BU
SOLUTION
* if the list does not change;
data mrg;
merge have0 have1;
if index(valuelist,country)=0 then output;
run;quit;
Up to 40 obs WORK.MRG total obs=1
Obs COUNTRY VALUELIST
1 BU US UK JP NW
It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.
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.