我需要使用SAS阵列为每个月创建最大值,以确定哪个程序运行时间最长。
数据将是:
Month Value Program
Jan 8 A
Jan 6 B
Feb 2 C
Feb 1 A
Mar 9 C
Mar 6 B
等等。
任何人都可以告诉我使用的语法
答案 0 :(得分:1)
我不会使用数组......我会对数据进行排序,然后使用First。符号
Proc sort data=data;
by month descending value;
run;
Data longest;
set data;
by month descending value;
if first.month then output;
run;
这将为您提供每月最高价值的记录。
<强>更新强>
数组的强度是在一次观察中处理变量。您可以保留数组,但如果您的数据太大而无法排序,则Hash对象更适合检查观察中的变量,然后使用数据步骤进行处理。
答案 1 :(得分:0)
正如Carolina所提到的,数组用于在同一观察中读取变量。它们不适合在这里完成任务。 一个简单的PROC SUMMARY可能是实现这一目标的最简单方法。我假设您运行时间的实际数据记录为几分之一秒,因此几乎不可能让一个月内完全相同的时间运行2个程序。如果没有那么你将需要考虑在平局的情况下该怎么做(proc sql将是更好的方法)。
以下是代码,如果您只想查看具有最高值的程序,而不是值本身,请使用'program'删除括号中的'value'。
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;