SAS阵列 - 每月创造最大价值

时间:2012-03-05 17:50:06

标签: arrays sas

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

数据将是:

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

等等。

任何人都可以告诉我使用的语法

2 个答案:

答案 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;