如何在SAS中将多变量符合条件值对应编号合并到单个列中
生成包含变量对应编号的新变量方法
以下是针对不同统计工具的实现方案,直接适配你的需求:
R语言实现
先模拟你的数据集,再通过变量映射与逐行处理生成目标变量:
# 构造示例数据集 df <- data.frame( Se = c("N", "N", "N", "Y", "N", "N", "N", "Y"), D = c(NA, NA, NA, "N", NA, NA, NA, "N"), L = c(NA, NA, NA, "Y", NA, NA, NA, "Y"), C = c(NA, NA, NA, "N", NA, NA, NA, "N"), Di = c(NA, NA, NA, "N", NA, NA, NA, "Y"), H = c(NA, NA, NA, "N", NA, NA, NA, "N"), O = c(NA, NA, NA, "N", NA, NA, NA, "N"), stringsAsFactors = FALSE ) # 定义各变量对应的编号 var_mapping <- c(D=1, L=2, C=3, Di=4, H=5, O=6) # 逐行生成新变量 df$new_var <- apply(df[, names(var_mapping)], 1, function(row) { # 筛选当前行值为"Y"的变量编号 selected_ids <- var_mapping[row == "Y"] # 转为逗号分隔的字符串,无匹配则为空 if (length(selected_ids) == 0) "" else paste(selected_ids, collapse = ",") }) # 查看结果 print(df)
SAS实现
通过逐个判断变量值,用catx函数自动拼接逗号分隔的编号:
/* 构造示例数据集 */ data have; input Se $ D $ L $ C $ Di $ H $ O $; datalines; N . . . . . . N . . . . . . N . . . . . . Y N Y N N N N N . . . . . . N . . . . . . N . . . . . . Y N Y N Y N N ; run; /* 生成目标新变量 */ data want; set have; length new_var $20; new_var = ""; if D = "Y" then new_var = catx(",", new_var, "1"); if L = "Y" then new_var = catx(",", new_var, "2"); if C = "Y" then new_var = catx(",", new_var, "3"); if Di = "Y" then new_var = catx(",", new_var, "4"); if H = "Y" then new_var = catx(",", new_var, "5"); if O = "Y" then new_var = catx(",", new_var, "6"); run; /* 输出结果 */ proc print data=want; run;
SPSS实现
先拼接带逗号的字符串,再去除末尾多余的逗号:
* 构造示例数据. DATA LIST FREE / Se (A1) D (A1) L (A1) C (A1) Di (A1) H (A1) O (A1). BEGIN DATA N . . . . . . N . . . . . . N . . . . . . Y N Y N N N N N . . . . . . N . . . . . . N . . . . . . Y N Y N Y N N END DATA. * 生成新变量. STRING new_var (A20). COMPUTE new_var = "". IF (D = "Y") new_var = CONCAT(new_var, "1,"). IF (L = "Y") new_var = CONCAT(new_var, "2,"). IF (C = "Y") new_var = CONCAT(new_var, "3,"). IF (Di = "Y") new_var = CONCAT(new_var, "4,"). IF (H = "Y") new_var = CONCAT(new_var, "5,"). IF (O = "Y") new_var = CONCAT(new_var, "6,"). * 移除末尾多余的逗号. COMPUTE new_var = RTRIM(new_var, ","). EXECUTE. * 查看结果. LIST.
内容的提问来源于stack exchange,提问作者Marta
相关产品推荐
相关产品推荐

