You need to enable JavaScript to run this app. SAS按列分组分析目标变量cus12与四类自变量依赖的循环编写求助
优惠活动
大模型
产品
解决方案
定价
更多

SAS按列分组分析目标变量cus12与四类自变量依赖的循环编写求助

SAS单变量与目标值依赖关系批量分析的循环实现问题

需求说明

  • 分析目标变量cus12与各自变量的依赖关联
  • 所用数据集共1000列,自变量按命名规则可划分为app_x、act_x、agr_x、ags_x四个组别
  • 需编写循环逻辑,遍历上述四个分组内的所有自变量,批量探究其与cus12的依赖关系

现存卡点

  • 循环结构的编写逻辑不清晰
  • 循环中嵌入适配SAS过程步的实现存在困难

当前已编写的SAS代码

%let src=C:\Users\chlop\Desktop\ProjektSAS;
%let out=C:\Users\chlop\Desktop\ProjektSAS\wyj;
libname src "&src" compress=yes;
libname out "&out" compress=yes;

/* 构造建模分析集 */
data out.test;
    set src.train;
    drop app_char_job_code app_char_marital_status app_char_city app_char_home_status app_char_cars act: agr: ags: default_cus3 default_cus6 default_cus9;
    where period<'200405';
run;

/* 按变量序号排序变量元数据表 */
proc sort data=names;
by varnum;
run;

%let target = default_cus12; *建模用目标变量;

/* 从变量元数据表筛选待分析变量,排除指定无关变量 */
proc sql;
select name
from names
where name ne "app_char_job_code" 
  and name ne "app_char_marital_status" 
  and name ne "app_char_city" 
  and name ne "app_char_home_status" 
  and name ne "app_char_cars" 
  and name ne "cid" 
  and name ne "period" 
  and name ne "&target";
quit;

/* 将筛选得到的待分析变量存入宏变量,以空格分隔 */
proc sql;
select name into:zmienne separeted by ' '
from names
where name ne "app_char_job_code" 
  and name ne "app_char_marital_status" 
  and name ne "app_char_city" 
  and name ne "app_char_home_status" 
  and name ne "app_char_cars" 
  and name ne "cid" 
  and name ne "period" 
  and name ne "&target";
quit;

%put &zmienne;

/* 测试按空格拆分变量列表的宏逻辑 */
%macro a(lista);
%do i=1 %to 3;
%put %scan(&lista, &i, ' '); *注意分隔符设置;
%end;
%mend;

%a(&zmienne);

/* 批量计算单变量GINI系数的宏 */
%macro gini(in, target, vars);
/* 初始化GINI结果存储表 */
data gini_tab;
length zmienna $ 50. gini 8.;
delete;
run; 

/* 获取待分析变量总个数 */
proc sql noprint;
select count(*)
into :n
from names;
quit;

/* 循环遍历每个变量计算GINI值 */
%do i=1 %to &n;
%let zm = %scan(&vars, &i,' '); *注意分隔符,按顺序选取变量;

/* 输出Logistic过程的关联度结果集 */
ods output Association=gini;
proc logistic data=&in;
model &target = &zm;
run;
ods output close;

/* 提取Somers'D值,换算为GINI系数 */
proc sql;
select nValue2 into :g_coef
from gini
where Label2 contains "Somers";
quit;

%put Gini: &zm = &g_coef;

/* 存储当前变量的GINI计算结果 */
data tmp;
length zmienna $ 50. gini 8.;
zmienna = "&zm";
gini = &g_coef;
run;

/* 将结果追加到总结果表 */
proc append base=gini_tab data=tmp force;
run;

%end;

/* 按GINI值从高到低排序最终结果 */
proc sort data=gini_tab;
by descending gini;
run;

%mend;

/* 调用宏执行批量GINI计算 */
%gini(src.train, default_cus12, &zmienne);

内容的提问来源于stack exchange,提问作者Piotr Kowalski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.09 01:15:05