SAS过程表格式输出数据集变量名称



我正在使用proc tabulate创建一个输出数据集,其中包含一个长名称(接近32个字符的最大值)变量的统计信息(n mean std min max p25 p75中位数)。输出数据集会将_n、_std等添加到我们的变量名中,但中值变量只是命名为"median",因为变量名末尾添加了"_median",得到的变量名将>32个字符。

有没有一种方法可以在过程制表步骤中指定输出数据集中变量的名称?我在这个过程中循环了1000个变量,所以在数据步骤中重命名每个变量是不可行的。此外,它必须是proc tabulate,而不是proc freq,因为我们需要为每个变量的每个可能值输出一行,而不仅仅是数据中存在的值。

proc tabulate data=DATA out=OUT ; 
var VERY_LONG_VARIABLE_NAME;
table VERY_LONG_VARIABLE_NAME *(n mean std min max p25 p75 median)/printmiss;
run;

不幸的是,我不知道有什么方法可以覆盖制表名。即使转换表格也不能解决这个问题——可悲的是,你仍然会得到同样的结果。

我的建议是使用不同的过程。几乎所有你可能使用的proc都有一种方法来获得你想要的东西——PRINTMISS等价物;例如,PROC FREQ有一个SPARSE选项,它做的事情基本上是一样的(尽管它的名字很奇怪),而PROC SUMMARYPROC MEANS可能会更好(类语句上有COMPLETETYPES),这取决于您的数据。

或者,您可以重塑数据,或者重塑流程。例如,如果你真的在数千个变量中循环,那效率非常低;更好的方法是将其重塑为变量|值结构(垂直),然后进行一个过程制表;这将立即解决您的问题(因为它将使"varname"成为CLASS或BY变量,而不是输出变量名的贡献者),并使您的过程更快。

你也可以在为你执行重命名的表格之前添加一个VIEW步骤;即使在宏循环中,成本也很低。

无论哪种方式,提供一些样本数据和你正在做的整个过程的例子,你可能会得到更好的答案。

最新更新