繁体   English   中英

sas 上的条件和 ID 变量的累积和

[英]Cummulative sum of variable by a condition and ID on sas

只要另一个变量保持不变,我就会尝试对一个变量求和。 只要 a 是常数,我想累积总和。 当 a 发生变化时,总和重新开始。 当一个新的 id 时,总和重新开始。

在此处输入图像描述

我想这样做:在此处输入图像描述

谢谢

您可以使用BY语句来指定其不同值组合将数据行组织成组的变量。 您正在重置每个组开始时的累加值,并在组中的每一行添加累加器。 使用retain在 DATA 步隐式循环迭代之间维护一个新的变量值。 SUM 语句是一个独特的 SAS 功能,用于累积和保留。

例子:

data want;
  set have;
  by id a;
  if first.a then mysum = 0;
  mysum + dur;
run;

SUM语句不同于SUM function。

<variable> + <expression>;  * SUM statement, unique to SAS (not found in other languages);

可以认为是

retain <variable>;
<variable> = sum (<variable>, <expression>);

就我而言,您需要使用排名列自行加入您的表格。

它应该按ida列进行排名。

FROM WORK.QUERY_FOR_STCKOVRFLW t1; 是您在屏幕截图中提供的表格

PROC SQL;
   CREATE TABLE WORK.QUERY_FOR_STCKOVRFLW_0001 AS 
   SELECT t1.id, 
          t1.a, 
          t1.dur, 
          /* mono */
            (monotonic()) AS mono
      FROM WORK.QUERY_FOR_STCKOVRFLW t1;
QUIT;

PROC SORT
    DATA=WORK.QUERY_FOR_STCKOVRFLW_0001
    OUT=WORK.SORTTempTableSorted
    ;
    BY id a;
RUN;
PROC RANK DATA = WORK.SORTTempTableSorted
    TIES=MEAN
    OUT=WORK.RANKRanked(LABEL="Rank Analysis for WORK.QUERY_FOR_STCKOVRFLW_0001");
    BY id a;
    VAR mono;
RANKS rank_mono ;
RUN; QUIT;



PROC SQL;
   CREATE TABLE WORK.QUERY_FOR_RANKRANKED AS 
   SELECT t1.id, 
          t1.a, 
          t1.dur, 
          /* SUM_of_dur */
            (SUM(t2.dur)) FORMAT=BEST12. AS SUM_of_dur
      FROM WORK.RANKRANKED t1
           LEFT JOIN WORK.RANKRANKED t2 ON (t1.id = t2.id) AND (t1.a = t2.a AND (t1.rank_mono  >=  t2.rank_mono ))
      GROUP BY t1.id,
               t1.a,
               t1.dur;
QUIT;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM