2016-09-06 45 views
1
Data IV_SAS; 
    set IV; 
    Total_Loans=Goods+Bads; 
    Dist_Loans=Total_Loans/sum(Total_Loans)); 
    Dist_Goods=Goods/Sum(Goods); 
    Dist_Bads=Bads/Sum(Bads); 
    Difference=Dist_Goods-Dist_Bads; 
    WOE=log10(Dist_goods/Dist_Bads); 
    IV=WOE*Difference; 
run; 

合計(総貸付金)の計算、列の合計ではなく行の合計の計算に問題があります。SASの列合計を計算し、別の列を計算するために入力として使用する必要があります。

+0

はい、関数は行に作用します。 proc means/summary/univariateを使用して列合計を作成します。 – Reeza

答えて

0

これは、Base SASがどのように機能するかを示しています。これはデータステップの行レベルで動作します。

PROC MEANSまたはPROC TABULATEまたは類似のprocを使用して、そこに列の合計を見つけて、それをマージしたり、別の方法で結合したりすることをお勧めします。例えば

proc means data=sashelp.class; 
    var age height weight; 
    output out=class_means sum(age)=age_sum sum(height)=height_sum sum(weight)=weight_Sum; 
run; 

data class; 
    if _n_=1 then set class_means; 
    set sashelp.class; 
    age_prop = age/age_sum; 
    height_prop = height/height_sum; 
    weight_prop = weight/weight_Sum; 
run; 

あるいは、Iは、上記溶液がより低いの両方に速度の可能性も優れていると思うけれども(インラインで尋ねられたとき、列レベルで動作するどちらも、SAS/IML又はPROC SQLを使用オーバーヘッド)。

0
data a; 
    input goods bads; 
    datalines; 
36945 33337 
23820 21761 
26990 24647 
33195 30299 
43755 39014 
46100 41100 
89765 79978 
25940 23508 
35940 32506 
31840 28846 
33430 30366 
34480 31388 
36640 33129 
39640 35992 
42490 38325 
44240 40075 
42840 38840 
49690 44936 
69190 64740 
; 
run; 

proc sql; 
create table b as 
     select goods,bads, 
      sum(goods,bads) as Total_Loans format=dollar10., 
      sum(goods)as Column_goods_tot format=dollar10. , 
      sum(bads) as Column_bads_tot format=dollar10. , 
      sum(calculated Column_goods_tot, calculated Column_bads_tot) as Column_Total_Loans format=dollar10. , 
     (calculated Total_Loans/calculated Column_Total_Loans) as Dist_Loans 
/*add more code to calculate Dist_Goods, Dist_Bads, etc..*/ 
     from a; 
quit; 


/*Column totals only*/ 
proc sql; 
create table c as 

      select 
      sum(goods)as Column_goods_tot format=dollar10. , 
      sum(bads) as Column_bads_tot format=dollar10. , 
      sum(calculated Column_goods_tot, calculated Column_bads_tot) as Column_Total_Loans format=dollar12. 

     from a; 
quit; 
関連する問題