SAS阵列 - 每月创建最大值
问题描述:
我需要使用SAS阵列来创建每个月的最大值,以确定哪个程序运行时间最长。SAS阵列 - 每月创建最大值
的数据是:
Month Value Program
Jan 8 A
Jan 6 B
Feb 2 C
Feb 1 A
Mar 9 C
Mar 6 B
等。
谁能告诉我如何使用语法
答
我不会用数组...我对数据进行排序,然后使用第一。符号。
Proc sort data=data;
by month descending value;
run;
Data longest;
set data;
by month descending value;
if first.month then output;
run;
这会给你一个最高值的月份记录。
更新:
阵列的强度处理在一个观察的变量。您可以保留数组,但是如果数据太大而无法排序,则使用Hash对象更适合于检查各个观察值中的变量,然后使用数据步骤进行处理。
答
正如Carolina提到的,数组用于在同一个观察值中读取变量。他们不适合在这里完成你的任务。 一个简单的PROC摘要可能是实现这一点的最简单方法。我假设你运行所用时间的实际数据记录为几分之一秒,因此实际上不可能有两个程序在一个月内完全同时运行。如果没有,那么你将需要考虑在平行事件中应该怎么做(proc sql会是更好的方法)。
这里是代码,如果您只想看到具有最高值的程序,而不是值本身,那么使用'程序'删除括号中的'值'。
data have;
input month $ value program $;
cards;
Jan 8 A
Jan 6 B
Feb 2 C
Feb 1 A
Mar 9 C
Mar 6 B
;
run;
proc summary data=have nway;
class month;
output out=want (drop=_:) maxid(value(program value))=;
run;
感谢这一点,它有助于我今天上午编写答案的方式。我的经理让我考虑如何使用阵列来完成我的训练。 – user1250416 2012-03-05 21:10:05