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

时间:2018-06-26 12:24:47

标签: sas formatting multiple-columns

我在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 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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

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

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

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