You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:15:28