【发布时间】:2015-11-07 01:23:46
【问题描述】:
我需要获取列中所有值的总和(下面代码中的“var1”)。据我所知,这是按如下方式完成的:
proc means data = somedata sum var1;
output out = sumtable sum = sum;
run;
我想在下一步中用作变量的总和。是否可以让上面的 OUTPUT 语句将总和存储在一个新变量中,而不是将其写入一个全新的数据集?如果是这样,它的语法是什么?
【问题讨论】:
我需要获取列中所有值的总和(下面代码中的“var1”)。据我所知,这是按如下方式完成的:
proc means data = somedata sum var1;
output out = sumtable sum = sum;
run;
我想在下一步中用作变量的总和。是否可以让上面的 OUTPUT 语句将总和存储在一个新变量中,而不是将其写入一个全新的数据集?如果是这样,它的语法是什么?
【问题讨论】:
总之,没有。您可以按照 Reeza 的建议将该值作为文本字符串存储到宏变量中,但如果要将其存储为变量,则该变量需要位于数据集中。
如果您想将该变量用于某事,将其带回未来的数据步骤并不难。只需引用存储它的数据集即可。
proc summary data=sashelp.class ;
var height weight ;
output out=class_summary sum=total_height total_weight;
run;
data new ;
set sashelp.class;
if _n_=1 then set class_summary;
fraction_of_total_wt = weight / total_weight;
fraction_of_total_ht = height / total_height;
run;
【讨论】:
听起来您想要一个宏变量而不是数据步骤。 在我看来,这最容易通过 PROC SQL 步骤而不是 PROC MEANS 来完成。 您的 PROC MEANS 看起来也不正确,VAR1 不属于那里并且会产生错误。
proc sql;
select sum(var1) into :sum_var1
from somedata;
quit;
%put &sum_var1;
您可以使用 &sum_var1 访问代码其他部分中的变量,这将解析为变量值。值得注意的是,所有宏变量都存储为文本。
【讨论】: