2012-03-05 64 views
0

我需要使用SAS阵列来创建每个月的最大值,以确定哪个程序运行时间最长。SAS阵列 - 每月创建最大值

的数据是:

Month Value Program 
    Jan  8  A 
    Jan  6  B 
    Feb  2  C 
    Feb  1  A 
    Mar  9  C 
    Mar  6  B 

等。

谁能告诉我如何使用语法

回答

1

我不会用数组...我对数据进行排序,然后使用第一。符号。

Proc sort data=data; 
by month descending value; 
run; 

Data longest; 
set data; 
by month descending value; 
if first.month then output; 
run; 

这会给你一个最高值的月份记录。

更新:

阵列的强度处理在一个观察的变量。您可以保留数组,但是如果数据太大而无法排序,则使用Hash对象更适合于检查各个观察值中的变量,然后使用数据步骤进行处理。

+0

感谢这一点,它有助于我今天上午编写答案的方式。我的经理让我考虑如何使用阵列来完成我的训练。 – user1250416 2012-03-05 21:10:05

0

正如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;