SAS создает новую переменную на основе значений формата из другой переменной - PullRequest
0 голосов
/ 10 апреля 2019

Я хотел бы использовать значения другой переменной в качестве informat в SAS.

У меня есть переменная item и ее значение скажем group, я хотел бы создать новую переменную с именем 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 ]

1 голос
/ 11 апреля 2019

Вы можете создать формат, который сопоставляет отдельную конкатенацию двух значений с одним описанием.

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 голос
/ 11 апреля 2019

Вы должны использовать 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;
0 голосов
/ 10 апреля 2019

Вы были близки. Измените свое утверждение формата, ему нужно значение для пола

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