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

从SAS转R:多变量循环按字符位置赋值total_drug问题

SAS转R:实现诊断码匹配逻辑的正确循环方法

原SAS代码逻辑

data Drug_inj;
set initial;
array odiag(25) odiag1-odiag25;
do i = 1 to 25;
if substrn(odiag(i), 1,3) = 'T36' and (substrn(odiag(i), 6,1) = '1') then total_drug = 1;
if substrn(odiag(i), 1,3) = 'T37' and (substrn(odiag(i), 6,1) = '1') then total_drug = 1;
if substrn(odiag(i), 1,3) = 'T38' and (substrn(odiag(i), 6,1) = '1') then total_drug = 1;
if substrn(odiag(i), 1,3) = 'T39' and (substrn(odiag(i), 6,1) = '1') then total_drug = 1;
if substrn(odiag(i), 1,2) = 'T4'  and (substrn(odiag(i), 6,1) = '1') then total_drug = 1;
if substrn(odiag(i), 1,3) = 'T50' and (substrn(odiag(i), 6,1) = '1') then total_drug = 1;
if substrn(odiag(i), 1,4) = 'T369' then total_drug = 1;
end;

需求说明

遍历odiag1至odiag25变量,只要任意一个变量满足以下条件之一,就将total_drug赋值为1:

  • 字符串前3位为T36/T37/T38/T39/T50且第6位为1
  • 字符串前2位为T4且第6位为1
  • 字符串前4位为T369

原尝试代码的错误点

  1. 变量列表定义错误:需用字符向量而非列表,且元素间需用逗号分隔
  2. 循环语法错误:正确格式应为for (var in 变量向量)
  3. substr参数错误:将判断条件误写进了截取长度参数中,需先截取字符串再做判断
  4. 列引用错误:Drug_inj$i会取列名为i的变量,需用Drug_inj[[var]]引用循环中的目标列
  5. ifelse逻辑混乱:多个条件未正确用逻辑运算符组合

正确的循环实现代码

# 初始化total_drug为0(默认不满足条件)
Drug_inj$total_drug <- 0

# 自动生成odiag1到odiag25的变量名向量
odiag_vars <- paste0("odiag", 1:25)

# 循环遍历每个诊断码变量
for (var in odiag_vars) {
  # 提取当前循环的诊断码列
  current_diag <- Drug_inj[[var]]
  
  # 拆分三个判断条件
  cond1 <- substr(current_diag, 1, 3) %in% c("T36", "T37", "T38", "T39", "T50") & substr(current_diag, 6, 6) == "1"
  cond2 <- substr(current_diag, 1, 2) == "T4" & substr(current_diag, 6, 6) == "1"
  cond3 <- substr(current_diag, 1, 4) == "T369"
  
  # 只要任一条件成立,将对应行的total_drug设为1
  Drug_inj$total_drug[cond1 | cond2 | cond3] <- 1
}

代码说明

  • 用paste0自动生成变量名,避免手动输入25个变量名的繁琐
  • 先初始化total_drug为0,确保未满足条件的行默认值正确
  • 拆分条件后用|(逻辑或)组合,符合SAS中多次判断只要任一条件触发就赋值1的逻辑
  • 循环中只要某一行的任意一个odiag变量满足条件,就将该行total_drug设为1,后续循环不会覆盖已赋值的1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:10:28