在使用proc转置时如何避免在列名中使用空格/制表符?举例说明我的问题的最好方法是举一个例子:
Data tst; input ColA $ ColB; datalines;
Cat1 1
Cat2 2
Cat3 3
; run;
proc transpose data = tst out= tst_out (drop = _name_); id ColA;
run;
基本上,我希望列名是"Cat1", "Cat1", "Cat1"
而不是" Cat1", " Cat1", " Cat1"
。
(如果这不可能,那么我有一个替代问题:如何在proc转置之后删除空格?在我的真实数据集中,我有很多列,所以我更喜欢不必键入的方法每列)
答案 0 :(得分:1)
只需将VALIDVARNAME选项的设置更改为V7,而不是ANY。它不会删除前导空格/制表符,但会将其更改为下划线,因此结果是有效名称。
示例:
data tst;
input ColA $& ColB;
datalines;
Cat 1 1
Cat 2 2
Cat 3 3
;
options validvarname=v7;
proc transpose data=tst out=tst2; id cola ; var colb; run;
proc print;
run;
结果:
Obs _NAME_ Cat_1 Cat_2 Cat_3
1 ColB 1 2 3
PS在SAS程序中使用内联数据时,请确保在第一列中开始数据行。这样可以防止在数据行中意外包含空格(或使用SAS / Studio界面时使用制表符)。从第一列开始放置DATALINES(也称为CARDS)语句还将防止编辑器在开始添加数据行时自动缩进。