在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

I tried this way.

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的Lag应该重置,而不是继续考虑在MeasNo=10时X和Y的先前值。

有人能帮帮我吗?

我还尝试了下面的方法,它有效…

 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; 

我不确定我理解你的逻辑,但如果你想要的是每个ASN组的第一个记录有缺失的区域,我认为下面会做到这一点。

我通常计算条件块之外的滞后,然后有条件地使用它们。

注意有负区域,因为两个x有时都减小。也许你想添加ABS()函数来计算xDiff的绝对值。

如果这不是你想要的输出,请把它添加到你的问题中。

92   data work.forArea;
93    set WORK.myData;
94    by ASN;
95
96    Lag_X=lag(X);
97    Lag_Y=lag(Y);
98
99    if first.ASN=0
100      then do;
101        xDiff = X - Lag_X;
102        areaRect = xDiff * (Y + Lag_Y)/2;
103      end;
104   put (ASN X Y areaRect)(=);
105  run;
ASN=1 X=10 Y=20 areaRect=.
ASN=1 X=12 Y=22 areaRect=42
ASN=1 X=13 Y=21 areaRect=21.5
ASN=1 X=14 Y=25 areaRect=23
ASN=1 X=11 Y=18 areaRect=-64.5
ASN=1 X=15 Y=21 areaRect=78
ASN=1 X=13 Y=19 areaRect=-40
ASN=1 X=12 Y=22 areaRect=-20.5
ASN=1 X=11 Y=18 areaRect=-20
ASN=1 X=10 Y=22 areaRect=-20
ASN=2 X=11 Y=21 areaRect=.
ASN=2 X=13 Y=24 areaRect=45
ASN=2 X=12 Y=22 areaRect=-23
ASN=2 X=15 Y=24 areaRect=69
ASN=2 X=12 Y=19 areaRect=-64.5
ASN=2 X=14 Y=20 areaRect=39
ASN=2 X=111 Y=18 areaRect=1843
ASN=2 X=14 Y=25 areaRect=-2085.5
ASN=2 X=13 Y=20 areaRect=-22.5
ASN=2 X=10 Y=21 areaRect=-61.5

最新更新