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 CHENGJI1INPUT 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
楼上这位是大牛,多向他学习学习
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)