Я хочу вычисленной площади под кривой в SAS, используя следующие данные:В SAS, как вычислить площадь под кривой
MeasNo X Y ASN
1 10 20 1
2 12 22 1
3 13 21 1
4 14 25 1
5 11 18 1
6 15 21 1
7 13 19 1
8 12 22 1
9 11 18 1
10 10 22 1
1 11 21 2
2 13 24 2
3 12 22 2
4 15 24 2
5 12 19 2
6 14 20 2
7 111 18 2
8 14 25 2
9 13 20 2
10 10 21 2
Я попробовал этот способ ..
data work.forArea;
set WORK.myData;
Lag_X=lag(X);
Lag_Y=lag(Y);
xDiff = X - Lag_X; /* width of rectangle */
areaRect = xDiff * (Y + Lag_Y)/2; /* multiply width by mean of height of two consecutive measurement (rectangles)*/
if first.MeasNo /*consecutive measurements */
then do; /* There is no rectangle for a subject’s first... */
Lag_X = .; /* ...data point alone. Be sure not to use the... */
Lag_Y = .; /* ...last data point from the previous rect. */
xDiff = .;
areaRect = .;
end;
run;
я не сделал получить результат, как ожидалось. Когда MeasNo = 1, задержка X и Y должна быть сброшена, вместо того, чтобы оставаться в соответствии с предыдущим значением X и Y при MeasNo = 10.
Не могли бы вы помочь?
Я также попытался ниже, который работал ...
data work.forArea3;
set WORK.forArea4;
if (_N_ = 1) then do;
variable=0;
Lag_Y=0;
Lag_X=0;
xDiff=0;
areaRect=0;
end;
run;
Но ниже код не работает ...
data work.forArea5;
set WORK.forArea3;
if (ASN NE lag1(ASN) and MeasNo=1) then do;
Lag_Y=0;
Lag_X=0;
xDiff = 0;
areaRect = 0;
end; else do;
if (ASN = lag1(ASN) and MeasNo>=2) then do;
Lag_Y=lag1(Y);
Lag_X=lag1(X);
xDiff = X - Lag_X;
areaRect = xDiff * (Y + Lag_Y)/2;
end; else do;
end;
end;
run;
Попробуйте '_N_ = 1' вместо' first.MeasNo'. –
Попробуйте 'if MeasNo = 1' вместо' first.MeasNo'. Но также изучите использование proc логистики для вычисления AUC. – Quentin
Спасибо, Роберт и @Quentin .. Нет, я не хочу использовать proc логистики, мои требования немного разные, мне жаль, что я не могу писать здесь. – ZeekDSA