如何使用sas筛选时间段并且求和?

如何使用sas筛选时间段并且求和?,第1张

data

test

infile

cards

dlm=','

input

site

$

year

month

value

cards

51701,1951,1,10,

51701,1951,2,20,

51701,1951,3,30,

51701,1951,4,40,

51701,1951,5,50,

51701,1951,6,60,

51701,1951,7,70,

51701,1951,8,80,

51701,1951,9,90,

51701,1951,10,10,

51701,1951,11,20,

51701,1951,12,30,

51701,1952,1,10,

51701,1952,2,20,

51701,1952,3,30,

51701,1952,4,40,

51701,1952,5,50,

51701,1952,6,60,

51701,1952,7,70,

51701,1952,8,80,

51701,1952,9,90,

51701,1952,10,10,

51701,1952,11,20,

51701,1952,12,30,

51701,1953,1,10,

51701,1953,2,20,

51701,1953,3,30,

51701,1953,4,40,

51701,1953,5,50,

51701,1953,6,60,

51701,1953,7,70,

51701,1953,8,80,

51701,1953,9,90,

51701,1953,10,10,

51701,1953,11,20,

51701,1953,12,30

run

*第一年9月份以后到第二年3月份的数据,我理解是51年10月-52年3月,52年10月-53年3月...

*时间段位6个月,要求它们value的和,可以先求和再筛选。

*我的方法是利用lag函数,进行倒推,依次是value,lag(value),....,然后求和

*最后进行月份筛选需要的和,这里是从每年3月倒推至上一年的10月

data

need

set

test

val_sum

=

value

+

lag(value)+

lag2(value)

+

lag3(value)

+

lag4(value)

+

lag5(value)

if

month

=

3

then

output

run

DATA CHENGJI1

INPUT NAME $ SEX $ MATH CHN GROUP

CARDS

李明 男 92 98 1

张红艺 女 89 1061

王思明 男 86 90 1

RUN

DATA CHENGJI2

INPUT NAME $ SEX $ MATH CHN GROUP

CARDS

张聪 男 95 92 2

刘颖 女 98 1012

高红 女 91 922

RUN

DATA CHENGJI3

INPUT NAME $ SEX $ MATH CHN GROUP

CARDS

赵强 男 93 99 3

李云芳女 96 1023

周闪 男 88 98 3

RUN

*第二步

DATA CHENGJI0

SET CHENGJI1 CHENGJI2 CHENGJI3

RUN

*第三步

DATA CHENGJI

SET CHENGJI0

AVG=MEAN(MATH,CHN)

RUN

PROC SORT

BY AVG

RUN

*第四步

DATA MATH90

SET CHENGJI0

WHERE MATH>90

RUN

*第五步

PROC SORT DATA=CHENGJI(KEEP=NAME GROUP AVG) OUT=LAST

BY GROUP AVG

RUN

DATA LAST

SET LAST

BY GROUP AVG

IF FIRST.GROUP

RUN

*第六步

PROC SORT DATA=CHENGJI0 OUT=MATH

BY SEX

RUN

DATA MATH(KEEP=SEX AVG SUM_ALL)

SET MATH END=T

BY SEX

IF FIRST.SEX THEN DO

I=0

M=0

END

M+MATH

I+1

AVG=M/I

J+1

TOT+MATH

IF LAST.SEX

IF T THEN SUM_ALL=TOT

RUN

*第七步

PROC SUMMARY DATA=CHENGJI0 NWAY

VAR MATH

OUTPUT OUT=A(DROP=_TYPE_ RENAME=(_FREQ_=N)) SUM=TOT

RUN

DATA DIF

IF _N_=1 THEN SET A

SET CHENGJI0

AVG=TOT/N

DIFF=AVG-MATH

DROP TOT N

RUN

*第八步

DATA EN

INPUT EN @@

CARDS

80 84 85 86 82 87 96 75 52

RUN

DATA ALL

SET CHENGJI0

SET EN

RUN

楼上这位是大牛,多向他学习学习


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8105564.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存