SAS有几种用于从过程中创建输出数据集的表单。并不总是清楚特定程序是否可以生成数据集,如果它似乎能够,则并不总是清楚如何。
在我的脑海中,这里有一些语法可以有多大差异的例子。
示例1
proc sort data = sashelp.baseball out = baseball_sorted;
by
league
division
;
run;
示例2
proc means noprint data = baseball_sorted;
by
league
division
;
var nHits;
output
out = baseball_avg_hits (drop = _TYPE_ _FREQ_)
mean = mean_hits
;
run;
示例3
ods exclude all;
ods output
statistics = baseball_statistics
equality = baseball_ftest
;
proc ttest data = baseball_sorted;
class league;
var nHits;
run;
ods exclude none;
示例4
PROC ANOVA
OUTSTAT=选项。
看起来好像SAS已经毫不犹豫地实施了这些。 SAS语法是否规定了如何创建由我看不到的某种一致方法指导的数据集,或者它是否真的变幻无常且随意?
答案 0 :(得分:3)
对于PROC代码,输出数据的语法通常特定于该过程,这通常感觉很无聊。 (您的示例1,2,4)我认为PROC开发人员有很多自由,并且请记住,这些PROCS中的许多都已有30多年的历史。
输出传送系统(ODS,您的示例3)的优点是它提供了输出数据的单一语法,无论过程如何。所以你可以使用ODS OUTPUT
语句(几乎?)任何PROC。输出对象的名称和结构当然会在PROC之间变化。因此,如果您正在寻找一致的方法,我将专注于使用ODS OUTPUT。在V7中添加了ODS(我认为)。
尝试查找输出数据集的示例会很有趣,该输出数据集可以由PROC制作但不能由ODS OUTPUT制作。我希望没有。如果是这种情况,您可以将PROC中的OUTPUT语句/选项范围视为遗留代码。
答案 1 :(得分:1)
同意昆汀。你必须记住,有些系统在那里运行80年代编写的代码。如果他们强迫每个团队重写所有程序然后强迫他们的客户更改他们的所有代码,那么SAS将会非常头痛。自60年代以来,SAS一直存在,语法的有机增长是可以预期的。
FWIW,拥有OUT=
语句对没有图形输出的事物有意义。 I.E. PROC SORT
或PROC TRANSPOSE
。
答案 2 :(得分:1)
我看到它的方式有四种主要方式来指定输出数据集。
是的,有多个地方需要检查,但幸运的是,程序的SAS文档与选项以及如何使用/指定输出相对比较清晰。
如果我在评论中错过了任何看似不同的内容,我可以更新此内容。
PS。虽然SAS绝对不好,但尝试在Python中导航不同的软件包/模块以导出XLSX文件也不是直截了当的。有些套餐支持其他人不会选择的选项。我已经放弃了问为什么这些日子,并且在这一点上接受它作为不同语言的特点。