Reputation: 521
I would like to get to use the values of other variable as informat in SAS.
I have a variable item, and its value say group, I would like to create a new variable called desc.
data x;
input item $ group;
datalines;
race 1
race 2
race 3
gender 1
gender 2
;
run;
proc format;
value race
1=White
2=Black
3=Other
;
gender
1=Female
2=male
;
run;
Ideally I would like to create variable desc using values from both item and group like this:
data y;
set x;
desc=put(item,group.);
run;
I wish to get:
item group desc
race 1 White
race 2 Black
race 3 Other
gender 1 Female
gender 2 male
Howerever, I get:
item group desc
race 1 put(race,1.)
race 2 put(race,2.)
race 3 put(race,3.)
gender 1 put(gender ,1.)
gender 2 put(gender,2.)
Upvotes: 0
Views: 1460
Reputation: 1427
You have to use PUTN. Also item and has to be swapped because item contains the format name.
data x;
input item $ group;
datalines;
race 1
race 2
race 3
gender 1
gender 2
;
run;
proc format;
value race
1=White
2=Black
3=Other
;
value gender
1=Female
2=male
;
run;
data y;
set x;
desc=putn(group,item);
run;
Upvotes: 1
Reputation: 27508
You can create a format that maps a distinct concatenation of two values to a single description.
proc format;
value $two_for_one
'race:1' = 'white'
'race:2' = 'black'
'race:3' = 'other'
'gender:1' = 'female'
'gender:2' = 'male'
data want;
set have;
desc = put(catx(':',item,group), $two_for_one.);
run;
Upvotes: 1
Reputation: 3315
you were close.change your format statement it needs value for gender
proc format;
value race
1=White
2=Black
3=Other
;
value gender
1=Female
2=male
;
run;
data y;
set x;
if trim(item) ="race" then desc=put(group,race.);
if trim(item) ="gender" then desc=put(group,gender.);
run;
Upvotes: 0