SAS-如何在while循环期间将2个数值连接成变量名

问题描述 投票:0回答:1

我试图通过编写一个循环来绕过一堆语句来改进一些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个数字,并在它们前面插入/连接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;


我尝试了一些不同的东西,例如猫,catx,'||'运营商。在python中实现这将是非常有趣的,但SAS对于我的绿色SAS自我来说证明灵活性稍差。有人甚至再使用SAS了吗?我很好奇!

任何帮助是极大的赞赏!干杯。

string sas append concat numeric
1个回答
0
投票

这段代码

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;
© www.soinside.com 2019 - 2024. All rights reserved.