Как эффективно отформатировать данные нескольких столбцов в SAS - PullRequest
0 голосов
/ 26 июня 2018

Я работаю в SAS и хочу изменить тип и формат нескольких столбцов. Например, некоторые из них я хочу преобразовать в числовую переменную с длиной формата 3, а другие - в символьную переменную с длиной формата 41.

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

Вот код:

DATA CAUSE1;
    SET Temp.MstCause;
    FORMAT CauseDescrs $CHAR30.;
    CauseDescrs = CauseDescr;
    Drop CauseDescr;
RUN;

DATA CAUSE;
    SET CAUSE1;
    FORMAT CauseDescr $41.;
    CauseDescr = CauseDescrs;
    Drop CauseDescrs;
RUN;

Кто-нибудь знает о более эффективном способе форматирования столбцов.

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Если вы изменяете переменную тип или длина , а не только применяемый формат, то вы должны использовать шаг и назначение данных. Вам не нужно использовать два шага данных, хотя это и не нужно; и вы могли бы использовать представление шага данных, если это промежуточный шаг (т. е. это не окончательный конечный файл).

Как я обычно это делаю, это так:

*Change character to numeric;
data want;
  set have(rename=var=var_c);
  var = input(var_c,informat.);
run;

*Increase length of character variable;
data want;
  length var $40;
  set have;
run;

Если вы изменяете только формат , а не length , то вы можете сделать это в proc datasets. Он может изменить большинство метаданных набора данных, но не может изменить фактическую сохраненную длину (что требует перезаписи всего набора данных). Я сомневаюсь, что это то, что вы делаете в приведенном выше примере (хотя вы используете формат по умолчанию и увеличиваете его), хотя; вы вероятно меняете длину .

Обратите внимание, что длина для символьной переменной - это количество символов, которое можно сохранить; в то время как format управляет отображением на экране (но не тем, что хранится). Применение формата к предыдущей необъявленной переменной установит ее длину равной длине формата, но длина и формат - это две в основном несвязанные вещи.

0 голосов
/ 26 июня 2018

Самый быстрый способ - обычно proc datasets, например ::1002 *

proc datasets lib = temp;
modify mstcause;
format causedescr $char30. anothervar 8.; /*...add more variables & formats here*/
run;
quit;

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

...