SAS-如何在while循环期间将2个数值连接到变量名
SAS- how to concat 2 numerical values onto variable name during while loop
我正在尝试通过编写一个循环来绕过大量语句来改进一些 SAS 代码。代码块语句示例如下:
if rpq_stage_date_01 ne . then stage_date_01 = rpq_stage_date_01;
if gps_stage_date_01 ne . then stage_date_01 = gps_stage_date_01;
if ldr_stage_date_01 ne . then stage_date_01 = ldr_stage_date_01;
if rpq_stage_date_02 ne . then stage_date_02 = rpq_stage_date_02;
if gps_stage_date_02 ne . then stage_date_02 = gps_stage_date_02;
if ldr_stage_date_02 ne . then stage_date_02 = ldr_stage_date_02;
这样下去14行...
所以我想我可以做一个 while 循环来迭代前 9 个数字,然后 insert/concat 在它们前面加一个 0,而不是这些语句。
不幸的是零是必要的。
data test(drop=i);
num = 0;
do i=1 to 10;
if rpq_stage_date_(num||i) ne . then stage_date_(num||i) =
rpq_stage_date_(num||i);
if gps_stage_date_(num||i) ne . then stage_date_(num||i) =
gps_stage_date_(num||i);
if ldr_stage_date_(num||i) ne . then stage_date_(num||i) =
ldr_stage_date_(num||i);
end;
do i = 10 to 14;
if rpq_stage_date_(i) ne . then stage_date_(i) = rpq_stage_date_(i);
end;
if gps_stage_date_(i) ne . then stage_date_(i) = gps_stage_date_(i);
end;
if ldr_stage_date_(i) ne . then stage_date_(i) = ldr_stage_date_(i);
end;
RUN;
PROC PRINT data=test; run;
我尝试了一些不同的东西,例如cat, catx, '||'操作员。在 python 中,实现起来会非常有趣,但事实证明 SAS 对于我的绿色 SAS 自我来说不太灵活。现在还有人用 SAS 吗?我很好奇!
非常感谢任何帮助!干杯。
此代码
if rpq_stage_date_01 ne . then stage_date_01 = rpq_stage_date_01;
if gps_stage_date_01 ne . then stage_date_01 = gps_stage_date_01;
if ldr_stage_date_01 ne . then stage_date_01 = ldr_stage_date_01;
可以替换为
stage_date_01 = coalesce(ldr_stage_date_01,gps_stage_date_01,rpq_stage_date_01);
您可以定义数组以通过一次遍历数组来处理此问题。
Array RPQ[*] RPT_STAGE_DATE:;
array gps[*] gps_stage_date:;
array ldr[*] ldr_stage_date:;
array stg[*] stage_date_01-stage_date_10;
do I = 1 to dim(stg);
stg[i] = coalesce(ldr[I],gps[I],rpq[I]);
end;
我正在尝试通过编写一个循环来绕过大量语句来改进一些 SAS 代码。代码块语句示例如下:
if rpq_stage_date_01 ne . then stage_date_01 = rpq_stage_date_01;
if gps_stage_date_01 ne . then stage_date_01 = gps_stage_date_01;
if ldr_stage_date_01 ne . then stage_date_01 = ldr_stage_date_01;
if rpq_stage_date_02 ne . then stage_date_02 = rpq_stage_date_02;
if gps_stage_date_02 ne . then stage_date_02 = gps_stage_date_02;
if ldr_stage_date_02 ne . then stage_date_02 = ldr_stage_date_02;
这样下去14行...
所以我想我可以做一个 while 循环来迭代前 9 个数字,然后 insert/concat 在它们前面加一个 0,而不是这些语句。 不幸的是零是必要的。
data test(drop=i);
num = 0;
do i=1 to 10;
if rpq_stage_date_(num||i) ne . then stage_date_(num||i) =
rpq_stage_date_(num||i);
if gps_stage_date_(num||i) ne . then stage_date_(num||i) =
gps_stage_date_(num||i);
if ldr_stage_date_(num||i) ne . then stage_date_(num||i) =
ldr_stage_date_(num||i);
end;
do i = 10 to 14;
if rpq_stage_date_(i) ne . then stage_date_(i) = rpq_stage_date_(i);
end;
if gps_stage_date_(i) ne . then stage_date_(i) = gps_stage_date_(i);
end;
if ldr_stage_date_(i) ne . then stage_date_(i) = ldr_stage_date_(i);
end;
RUN;
PROC PRINT data=test; run;
我尝试了一些不同的东西,例如cat, catx, '||'操作员。在 python 中,实现起来会非常有趣,但事实证明 SAS 对于我的绿色 SAS 自我来说不太灵活。现在还有人用 SAS 吗?我很好奇!
非常感谢任何帮助!干杯。
此代码
if rpq_stage_date_01 ne . then stage_date_01 = rpq_stage_date_01;
if gps_stage_date_01 ne . then stage_date_01 = gps_stage_date_01;
if ldr_stage_date_01 ne . then stage_date_01 = ldr_stage_date_01;
可以替换为
stage_date_01 = coalesce(ldr_stage_date_01,gps_stage_date_01,rpq_stage_date_01);
您可以定义数组以通过一次遍历数组来处理此问题。
Array RPQ[*] RPT_STAGE_DATE:;
array gps[*] gps_stage_date:;
array ldr[*] ldr_stage_date:;
array stg[*] stage_date_01-stage_date_10;
do I = 1 to dim(stg);
stg[i] = coalesce(ldr[I],gps[I],rpq[I]);
end;