[英]SAS: Grouping by ID and summing the number of a condition in a variable for the ID
[英]Cummulative sum of variable by a condition and ID on sas
您可以使用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>);
就我而言,您需要使用排名列自行加入您的表格。
它应该按id
和a
列进行排名。
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.