我在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
中进行更改。它可以更改大多数数据集元数据,但不能更改实际存储的长度(这需要重写整个数据集)。我怀疑你在上面的例子中正在做什么(因为你正在使用默认格式,并增加它);你可能正在改变长度。
请注意,字符变量的长度是可以存储的字符数;格式控制它在屏幕上的显示方式(但不是存储的内容)。将格式应用于先前未声明的变量将其长度设置为格式的长度,但长度和格式是两个主要不相关的东西。