Dear Members,
I've a dataset which contain missing and non missing values. The "Spec" dataset contains the information about first dataset. I wanted to check missing values variable and wanted to create one more dataset which should contain the original dataset with one extra variable . I got stuck how i can concatenate variable names.
Output wanted:
a b c Missing_Details
1 . a1 B is missing
. 2 b2 A is missing
. . A is missing,B is missing,C is missing
1 2 c3
data test;
infile datalines;
input a b c $1.;
datalines;
1 . a
. 2 b
. .
1 2 c
;
run;
data Spec;
input Req name $ TYPE $;
datalines;
0 a NUM
0 b NUM
0 C CHAR
;
run;
proc sql;
select name into :name1 SEPARATED by ' ' from spec WHERE TYPE EQ 'NUM';
select name into :name_CH1 SEPARATED by ' ' from spec WHERE TYPE EQ 'CHAR';
quit;
OPTIONS MPRINT MLOGIC SYMBOLGEN;
DATA _NULL;
SET TEST;
ARRAY ARR[*] &name1;
array arr1[*] &name_ch1;
DO J=1 TO dim(ARR);
IF MISSING(ARR[J]) THEN MISS='MISSING';
END;
DO i=1 TO dim(arr1);
IF MISSING(ARR1[i]) THEN MISS='MISSING';
END;
RUN;
Thank you everyone in advance !!
Using what you've posted here a solution approach.
DATA want(drop=i j);
SET TEST;
ARRAY ARR[*] &name1;
array arr1[*] &name_ch1;
length Missing_Details $120;
DO J=1 TO dim(ARR);
IF MISSING(ARR[J]) THEN
Missing_Details=catx(',',Missing_Details,vname(ARR[J]));
END;
DO i=1 TO dim(arr1);
IF MISSING(ARR1[i]) THEN
Missing_Details=catx(',',Missing_Details,vname(ARR1[i]));
END;
RUN;
proc print data=want;
run;
N.B: The length of variable Missing_Details must be sufficient to hold all the variable names in case they are all missing (=32 characters for the var name plus 1 character for the comma per variable).
Hello,
data test;
infile datalines;
input a b c $1.;
array n _NUMERIC_;
array ch _CHARACTER_;
length miss $200;
do over n;
if missing(n) then miss=catx(' ', miss, vname(n), 'is missing');
end;
do over ch;
if missing(ch) then miss=catx(' ', miss, vname(ch), 'is missing');
end;
datalines;
1 . a
. 2 b
. . .
1 2 c
;
run;
Using what you've posted here a solution approach.
DATA want(drop=i j);
SET TEST;
ARRAY ARR[*] &name1;
array arr1[*] &name_ch1;
length Missing_Details $120;
DO J=1 TO dim(ARR);
IF MISSING(ARR[J]) THEN
Missing_Details=catx(',',Missing_Details,vname(ARR[J]));
END;
DO i=1 TO dim(arr1);
IF MISSING(ARR1[i]) THEN
Missing_Details=catx(',',Missing_Details,vname(ARR1[i]));
END;
RUN;
proc print data=want;
run;
N.B: The length of variable Missing_Details must be sufficient to hold all the variable names in case they are all missing (=32 characters for the var name plus 1 character for the comma per variable).
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!
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.