I have a dataset with 4 variables that basically is the same variable that house intervention codes. Is there a proc freq code that I can use to treat the 4 variables the same variable to get an overall frequency distribution of all 4 variables? Here is the sample dataset.
data SAMPINT;
infile datalines dsd truncover;
input ID:BEST. Intervention1:$3. Intervention2:$3. Intervention3:$3. Intervention4:$3.;
datalines4;
1,BB8,ABC,ABC,
2,BB8,ABC,CCC,
3,,BB8,,
4,,,BB8,
5,,,,BB8
6,,CCC,,
7,ABC,,,
8,,BB8,,ABC
9,,BB8,,
10,,,,
;;;;Essentially, I would like the output to look like this:
| Intervention | Frequency |
| BB8 | 7 |
| ABC | 5 |
| CCC | 1 |
Thanks alot for your help!
Something like this?
data SAMPINT;
infile datalines dsd truncover;
input ID:BEST. Intervention1:$3. Intervention2:$3. Intervention3:$3. Intervention4:$3.;
datalines4;
1,BB8,ABC,ABC,
2,BB8,ABC,CCC,
3,,BB8,,
4,,,BB8,
5,,,,BB8
6,,CCC,,
7,ABC,,,
8,,BB8,,ABC
9,,BB8,,
10,,,,
;;;;
proc transpose data=SAMPINT
out=long_SAMPINT(rename=(Col1=Intervention) drop = _NAME_);
by ID;
var Intervention1-Intervention4;
run;
proc freq data = long_SAMPINT;
tables Intervention / nocum nopercent;
run;
Something like this?
data SAMPINT;
infile datalines dsd truncover;
input ID:BEST. Intervention1:$3. Intervention2:$3. Intervention3:$3. Intervention4:$3.;
datalines4;
1,BB8,ABC,ABC,
2,BB8,ABC,CCC,
3,,BB8,,
4,,,BB8,
5,,,,BB8
6,,CCC,,
7,ABC,,,
8,,BB8,,ABC
9,,BB8,,
10,,,,
;;;;
proc transpose data=SAMPINT
out=long_SAMPINT(rename=(Col1=Intervention) drop = _NAME_);
by ID;
var Intervention1-Intervention4;
run;
proc freq data = long_SAMPINT;
tables Intervention / nocum nopercent;
run;
Thanks. Is there a way to limit the final output to the top 5 observations in descending order?
If you are fond of writing code, using a hash object can replace both procs.
data _null_;
set work.sampint end=done;
length Intervention $ 3 Frequency 8;
array inter Intervention1-Intervention4;
if _n_ = 1 then do;
declare hash h(/*ordered: 'YES'*/);
h.defineKey('Intervention');
h.defineData('Intervention', 'Frequency');
h.defineDone();
end;
do i = 1 to dim(inter);
if not missing(inter[i]) then do;
Intervention = inter[i];
if h.find() ^= 0 then do;
Frequency = 1;
h.add();
end;
else do;
Frequency = Frequency + 1;
h.replace();
end;
end;
end;
if done then do;
h.output(dataset: 'work.want');
end;
run;
proc print data=work.want;run;
April 27 – 30 | Gaylord Texan | Grapevine, Texas
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!
Still thinking about your presentation idea? The submission deadline has been extended to Friday, Nov. 14, at 11:59 p.m. ET.
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.