SAS根据其他变量的格式值创建新变量

时间:2019-04-10 18:40:50

标签: variables sas format

我想使用其他变量的值作为SAS中的信息。

我有一个变量项,其值表示组,我想创建一个称为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;

理想情况下,我想像这样使用项目和组中的值创建变量desc:

data y;
 set x;
 desc=put(item,group.);
run;

我希望得到:

item group desc
 race 1  White
 race 2  Black
 race 3  Other
 gender 1 Female
gender 2 male

但是,我得到了:

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.)

3 个答案:

答案 0 :(得分:1)

您可以创建一种格式,将两个值的不同串联映射到单个描述。

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;

答案 1 :(得分:1)

您必须使用 PUTN 。也是项目,必须交换,因为项目包含格式名称。

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;

答案 2 :(得分:0)

您已经关闭。更改格式声明,该值需要性别值

  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;