ehyea
有如下数据表A
ID DAY PDA
1 1 0
1 2 0
1 3 0
1 4 0
2 1 0
2 2 1
2 3 0
2 4 0
3 1 1
3 2 1
3 3 0
3 4 1
数据是四天的观测值,要做的是若四天里PDA的和大于等于1,则输出新数据的PDA为1,若PDA的和等于0,则输出新数据的PDA为0,也即产生的新数据如下
ID PDA
1 0
2 1
3 1
请问这应该如何编程?我是新手,刚刚接触SAS,谢谢啦
abel
个人认为,最方便的方法
proc sql
fairy
data a;
input id $ day pda;
cards;
1 1 0
1 2 0
1 3 0
1 4 0
2 1 0
2 2 1
2 3 0
2 4 0
3 1 1
3 2 1
3 3 0
3 4 1
;
proc sort;
by id;
run;
data a(drop=day pda);
set a;
by id;
if first.id then n_pda=0;
n_pda+pda;
if last.id;
run;
data a(drop=n_pda);
set a;
if n_pda ge 1 then pda=1;
else pda=0;
run;
fairy
建议好好看看base SAS
怎么可能
data aa;
input ID DAY PDA@@;
cards;
1 1 0
1 2 0
1 3 0
1 4 0
2 1 0
2 2 1
2 3 0
2 4 0
3 1 1
3 2 1
3 3 0
3 4 1
;
proc sort;
by ID;
run;
data bb;
drop PDA DAY sum_pda;
set aa;
by ID;
if first.ID then sum_pda=0;
sum_pda+pda;
pda2=(sum_pda>=1);
if last.ID then output;
run;
proc print noobs;
run;
waterlwh
/***********************ONE*************************/
PROC UNIVARIATE DATA=A NOPRINT;
VAR PDA;
BY ID;
OUTPUT OUT=B SUM=SUM;
DATA C(DROP=SUM);
SET B;
PDA=SUM>0;
RUN;
/******************TWO*****************************/
PROC SQL;
CREATE TABLE B AS
SELECT DISTINCT ID, CASE
WHEN MAX(PDA)<=0 THEN 0
ELSE 1
END AS PDA FROM A
GROUP BY ID;
QUIT;
王笑权
搓一把
data cos;
input ID DAY PDA;
cards;
1 1 0
1 2 0
1 3 0
1 4 0
2 1 0
2 2 1
2 3 0
2 4 0
3 1 1
3 2 1
3 3 0
3 4 1
;
proc means noprint sum;var pda;by id;output out=a sum=h;
data a1(keep=id pda);set a;if h<1 then pda=0;if h^=0 then pda=1;
proc print data=a1;run;
结果
obs id pda
1 1 0
2 2 1
3 3 1