如何有效地格式化SAS中多列的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何有效地格式化SAS中多列的数据相关的知识,希望对你有一定的参考价值。

我在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;

有谁知道一种更有效的格式化列的方法。

答案

最快的方法通常是proc datasets,例如:

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

您还可以在处理数据时应用格式,例如通过向proc means或其他统计过程添加格式语句。

另一答案

如果要更改变量类型或长度,而不仅仅是应用的格式,则必须使用数据步骤和赋值。但是,您不必使用两个数据步骤,这是不必要的;如果这是一个中间步骤(即,它不是最终的可交付文件),您可以使用数据步骤视图。

我通常这样做的方式是这样的:

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

如果您只是更改格式而不是长度,那么您可以在proc datasets中进行更改。它可以更改大多数数据集元数据,但不能更改实际存储的长度(这需要重写整个数据集)。我怀疑你在上面的例子中正在做什么(因为你正在使用默认格式,并增加它);你可能正在改变长度。

请注意,字符变量的长度是可以存储的字符数;格式控制它在屏幕上的显示方式(但不是存储的内容)。将格式应用于先前未声明的变量将其长度设置为格式的长度,但长度和格式是两个主要不相关的东西。

以上是关于如何有效地格式化SAS中多列的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在vim中编辑多列中的文本

在SAS中导入CSV数据时如何设置正确的日期格式?

如何有条件地 %include 一个定义宏的 *.sas 文件?

我应该如何使用 Outlook 发送代码片段?

如何有效地打开 30gb 的文件并处理其中的片段而不减慢速度?

SAS:使用宏格式化多个proc频率