Как запретить начальные подчеркивания для имен переменных при использовании Proc Transpose - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь преобразовать набор данных, который выглядит следующим образом:

  A        B        C
2011      NH        25
2011      MA        40 
2015      CA        50
2016      KY        58

Я хочу, чтобы вывод был:

 B     2011     2015      2016
NH      25        -         -
MA      40        -         -
CA       -        50        -
KY       -        -         58

В настоящее время мой код:

 proc transpose data = Test out = Test2(drop = _label_);
     id Year_Enter;
     Var Numeric;
     by Category NOTSORTED;
 run;

Однако, когда я запускаю это, все имена моих столбцов имеют подчеркивание впереди, например _2011, _2015, _2016.

Как запретить добавление подчеркивания?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

Если вы хотите набор данных, вы можете использовать допустимые имена для переменных.Имена переменных обычно не могут начинаться с цифр.Вы можете использовать опцию PREFIX = в операторе PROC TRANSPOSE, чтобы выбрать, к каким символам вы добавляете префиксы к значениям вашей числовой переменной для создания допустимых имен.Поэтому вы можете использовать PREFIX=Y для генерации имен переменных, таких как Y2011, или использовать PREFIX=Year_ для генерации имен, таких как Year_2011.Вы можете использовать оператор IDLABEL, чтобы поместить пустую числовую строку в качестве ЭТИКЕТКИ переменной.

proc transpose data=have prefix=Year_ out=want(drop=_name_);
  by State;
  id Year;
  idlabel Year;
  var Value;
  format year 4.;
run;

proc print;
run;

enter image description here

proc print label;
run;

enter image description here

Но на самом деле похоже, что вы хотите составить ОТЧЕТ, а не ДАННЫЙ КОМПЛЕКТ.Например, вы можете создать этот отчет, используя PROC REPORT из исходного набора данных, без необходимости PROC TRANSPOSE.

proc report missing data=have ;
  column state value,year ;
  define state / group ;
  define year / across ' ';
  define value / sum ' ';
run;

enter image description here

0 голосов
/ 05 марта 2019

Транспонирование в форму, в которой значения данных (год) становятся метаданными (год в качестве имени столбца), обычно указывают на преобразование отчетности.Попробуйте использовать Proc TABULATE для рендеринга преобразования.

data have; input
A        B $       C; datalines;
2011      NH        25
2011      MA        40 
2015      CA        50
2016      KY        58
run;

proc tabulate data=have;
  class a;
  class b / order=data;
  var c;
  table b='',a=''*c=''*sum='';
run;

enter image description here

0 голосов
/ 04 марта 2019

Вам необходимо включить расширенные имена переменных.Переменные SAS должны соответствовать определенным соглашениям об именах , некоторые из которых могут быть переопределены:

  • Имя может иметь длину до 32 байтов.
  • Имя может содержать буквы латинского алфавита, цифры или подчеркивания.
  • Имя не может содержать пробелов или специальных символов, кроме подчеркивания.
  • Имя должно начинаться с буквы латинского алфавита (A – Z, a – z) илиподчеркивание.

Если вы включите опцию options validvarname=any;, вы удалите подчеркивание перед числовыми именами переменных и будете использовать расширенные правила именования SAS.Смотрите пример ниже.

data have;
    input A B$ C;
    datalines;
2011 NH 25
2011 MA 40
2015 CA 50
2016 KY 58
;
run;

options validvarname=any;
proc transpose data = have out = want(drop = _label_);
     id A;
     Var C;
     by B NOTSORTED;
run;
...