Преобразование нескольких переменных в SAS из 0/1 в «Да» / «Нет» - PullRequest
0 голосов
/ 05 июня 2019

Я заинтересован в преобразовании следующих переменных из 0/1 в «Да» / «Нет» в следующем наборе данных SAS с использованием цикла:

Person       Variable1       Variable2       Variable3     Variable4  ... Variable36
001          0               1               0             1              0
002          1               1               0             0              0
003          0               0               1             1              1

В идеале я хотел бы сохранитьодни и те же имена переменных.Любое понимание будет оценено.

Ответы [ 2 ]

3 голосов
/ 05 июня 2019

Самый простой способ - использовать proc format.

proc format library=work;
    value myformat 1='Yes'
                   0='No';
run;

data want;
format variable: myformat.;
set have;
run;

В этом сценарии мы просто назначаем формат myformat всему, что начинается с variable.Двоеточие является символом подстановки.Просто имейте в виду, что это не меняет фактическое значение переменных.Если вы запустите proc contents, вы увидите, что переменные все еще числовые.

1 голос
/ 05 июня 2019

Если вы действительно хотите преобразовать их все в символы, вы можете использовать PROC TRANSPOSE.Когда вы транспонируете числовые переменные с символьными переменными, все они преобразуются в символьные.Это также сохранит метки переменных, но вам может потребоваться добавить для этого оператор IDLABEL.Эта техника плохо масштабируется.

data have;
   input Person:$3. Variable1-Variable5;
   retain dummy '13';
   cards;
001          0               1               0             1              0
002          1               1               0             0              0
003          0               0               1             1              1   
;;;;
   run;
proc format; value yn 0='No' 1='Yes';
   run;
proc print;
   run;
proc transpose data=have out=t1;
   by person;
   var Variable: dummy;
   format variable: yn3.;
   run;
proc transpose data=t1 out=want(drop=_name_);
   where upcase(_name_) ne 'DUMMY';
   by person;
   var col1;
   run;
proc contents varnum;
proc print;
   run;
...