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

问题描述 投票:0回答:2

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

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

sas formatting multiple-columns
2个回答
0
投票

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

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

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


0
投票

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

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

*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中进行更改。它可以更改大多数数据集元数据,但不能更改实际存储的长度(这需要重写整个数据集)。我怀疑你在上面的例子中正在做什么(因为你正在使用默认格式,并增加它);你可能正在改变长度。

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

© www.soinside.com 2019 - 2024. All rights reserved.