I have a data table with 5 vars that I want to do some work with. The names of these vars are Sec1-Sec5
Sec1 Sec2 Sec3 Sec4 Sec5
Test1 Test2 Test3 Test5
Test1
Test2 Test4
With the above data I need to create a field that will tell me which fields are populated.
I want my end result to look like this
1,2,3,5
1
2,4
What is the best way to approach this?
Thank you
A little array processing is one way to solve this...
data want;
set have;
array Secs[5] sec1-sec5;
length populated $10;
do i = 1 to 5;
if secs ne '' then
populated = catx(',', populated, put(i,1.));
end;
drop i;
run;
Or, adding a few tricks of the trade (learned mostly on this Forum) :
data want;
set have;
array S{*} sec:;
length populated $10;
do i = 1 to dim(S);
if not missing(S{i}) then
populated = catx(',', populated, i);
end;
drop i;
run;
PG
alternatively,
data want;
set have;
populated=compress(catx(',',of sec1-sec5),,'a');
run;
Thanks,
Jagadish
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.
Find more tutorials on the SAS Users YouTube channel.