2017年10月27日 星期五

分組

%macro my_cn2(data =, y =, x =, c_x =, l_r=, z =);

ods trace on / listing; 
proc contents data =  &data.;
 ods output Variables = contents_;
run;
ods trace off;

data contents_;
 set contents_;
 where upcase(Variable) = "%upcase(&y.)";
 call symputx("type", type);
run;

%if "&type." = "Num" %then %do;
 data temp_data;
  set &data.;
  y_ = put(&y. ,z&z..);
 run;
%end; %else %do;
  data temp_data;
   set &data.;
   y_ = &y.;
  run;
%end;


proc sql;
 create table class_ as
  select  distinct  y_
  from temp_data;
quit;

%let data_class = class_;
%let open_d = %sysfunc (open(&data_class.));
%let row_n = %sysfunc(attrn(&open_d., nobs));
%let close_d = %sysfunc(close(&open_d.));

proc sql noprint;
 select  y_
  into :y1 - :y&row_n.
  from class_;
quit;

data _null_;
 comb_ = comb(&row_n.,2);
 call symputx("comb_", comb_);
run;

proc iml;
 allcomb_ = allcomb(&row_n., 2);
 create allcomb var {allcomb_}; 
 append;       
 close allcomb;
quit;

%let data__ = allcomb;
%let open_d = %sysfunc (open(&data__.));
%let row_nn = %sysfunc(attrn(&open_d., nobs));
%let close_d = %sysfunc(close(&open_d.));

proc sql noprint;
 select  allcomb_
  into :r2n_1 - :r2n_&row_nn.
  from allcomb;
quit;



%do comb_i = 1 %to &row_nn. %by 2;
%let comb_i_ = %sysevalf(&comb_i. +1);
%let comb__ = 1;/*66*/
/*%put &comb_i. &comb_i_.;*/
/*data comb_&comb__.;*/
data _&&&&y&&r2n_&comb_i...vs_&&&&y&&r2n_&comb_i_...;
 set temp_data;
  where y_= "&&&&y&&r2n_&comb_i..." or y_ = "&&&&y&&r2n_&comb_i_...";
run;


 %if "&l_r." = "t" %then %do; 
  proc logistic data = _&&&&y&&r2n_&comb_i...vs_&&&&y&&r2n_&comb_i_... plots=all;
   class &c_x.;
   model y_ = &x. &c_x.;
   output out = o__&&&&y&&r2n_&comb_i...vs_&&&&y&&r2n_&comb_i_... PREDICTED= p PREDPROBS= p2;
  quit;
 %end;
 %let comb__ = %sysevalf(&comb__. +1);/*66*/
%end;

%mend;
%my_cn2(data = mysas.unk, y = final, z=1)


data 資料集
y 類別變數
z 類別變數為數值型態時且類別總類小於10 z=1 小於100 z=2 ....  文字形態時可不輸入


4類別分組後結果

Related Posts:

  • ERROR: Unable to transcode data to/from UCS-2 encoding.可試試此MACRO(連結) 或使用KCOUNT() 找中文 檢查長度夠不夠 以下舊文 append失敗時,可能為以下情況: 1.非NULL欄位,觀測值為NULL。 2.文字欄位長度不夠,產生亂碼。     (數值欄位也有可能,SAS大多為8,但… Read More
  • 比較兩個 SAS DATA 變數的屬性 MACRO先將兩個SAS DATA的屬性output到sit_var與uat_var,把欄位屬性變成觀測值。 如下: data DB1_DS1; length y $ 13.; input x y z; format x ddmmyy.; datalines; 1 1 1 ; run; data D… Read More
  • SAS Macro Meta-Analysis 統合分析 %meta_rr %meta_or %meta_rd %my_meta_norm %ForestMacro  %PubBias %macro pseudo_rsq(log_lh=, log_lh_i=, k=, obs=); proc iml; value = … Read More
  • SOURCE_CHECK_2 SAS AML 的 SOURCE_CHECK 已經有資料筆數、NULL、UNIQUE與LOOKUP的檢核了 SOURCE_CHECK_2 檢核觀測值的MACRO。 範例: data DB_A; input Pty $ score  number; datalines; A 100 … Read More
  • 分組%macro my_cn2(data =, y =, x =, c_x =, l_r=, z =); ods trace on / listing; proc contents data = &data.; ods output Variables = contents_; run;… Read More

0 意見:

張貼留言