Sorry for missing information. Here is my datalines and my code. I have thousands "Data" columns. Thanks to @Reeza i can calcuate ABSPowerStat for first Data column but i tried some macros to calculate for all "Data" columns but i failed. I'm new on macro language. Could you help me ,please ? Data0005 ....... Data0006 ......... Data0007 ........... data defaultCok;
length default 8. Data 8. Data2 8. Data3 8. ;
infile datalines missover;
input Default Data Data2 Data3;
datalines;
0 4.15 5.15 4.00
1 0.03 5.50 3.50
0 1.53 1.70 3.05
1 0.32 0.47 2.50
1 0.03 0.90 1.70
0 0.61 0.00 3.70
0 0.78 0.80 2.70
1 0.00 2.90 4.10
0 0.70 2.09 0.00
1 0.09 3.00 2.90
1 0.00 4.00 0.00
1 2.81 4.02 0.10
0 0.47 5.00 2.90
1 1.92 4.00 4.50
1 0.01 3.50 3.00
0 0.69 2.10 1.70
;
proc sort data=work.defaultCok;
by descending Data;
run;
data work.cumulative;
set work.defaultCok;
NonDefault=1-Default;
by data notsorted;
if first.default then defaultRate=0;
defaultRate+default;
if first.default then NondefaultRate=0;
NondefaultRate+Nondefault;
run;
/*proc sql;
create table yeni as
select data,(select SUM(default) from work.default as def2 where def2.data <= def1.data) as defaultRate
from work.default def1
order by data desc;*/
proc sql;
create table work.cumulative2 as
select default,data,NonDefault,defaultRate,NondefaultRate,sum(default) as TotalDefault,sum(NonDefault) as TotalNonDefault
from work.cumulative;
quit;
data PowerStat;
set work.cumulative2 END=lastN;
ResultD=defaultRate/TotalDefault;
ResultND=NondefaultRate/TotalNonDefault;
Retain Sonuc 0 MaxSonuc 0;
Area=(ResultND+Lag(ResultND))/2*(ResultD-Lag(ResultD));
IF missing(Area)=1 then Area2=0;
Else Area2=Area;
Sonuc=Sonuc+Area2;
if Sonuc>maxSOnuc then maxsonuc=sonuc;
if lastN then do;
PowerStat=(MaxSonuc-0.5)*2;
ABSResult=ABS(PowerStat);
output;
keep absresult;
end;
run;
... View more