SPSS语法:在嵌套循环中重新编码

时间:2015-10-22 09:05:05

标签: loops spss recode

我希望你能帮助我解决有关嵌套循环中的重新编码的问题(SPSS语法)。 :)

在我的SPSS数据库中,我有不同药物的血液水平测量值(每周3次,持续20周)。 我想为每种物质创建箱图,使用recode为每种物质生成一个新变量。

以下过程描述了一种物质的过程。我可以抽象出其余的一种物质的解决方案。

因此,通过点击GUI会有这样的方式,这对于如此多的测量非常耗费 - 而且容易出错 - 所以我想用SPSS语法来做这件事。

提醒:每周3次测量(1-3次)超过20周(0-19);

第一周第一次测量的RECODE如下所示:

DO IF (W0_TDM_1AP=1).
RECODE
 W0_TDM_1Erg
 (ELSE=Copy) INTO AMS.
END IF.
EXECUTE.

如果我想用Python或PHP实现它,它看起来像这样(伪代码):

for($i=0; $i<19; $i++)
{
  for($j=1; $j<3; $j++)
  {
    DO IF (W{$i}_TDM_{$j}AP=1).
    RECODE
     W{$i}_TDM_{$j}Erg
     (ELSE=Copy) INTO AMS.
    END IF.
    EXECUTE.
  }
} 

我的基本想法是:嵌套LOOP并在内部循环上执行重新编码。由于$ i和$ j是整数,我必须对字符串进行强制转换,然后检查条件:(伪代码)

LOOP #i=0 TO 19 .
 LOOP #j=1 TO 3 .
  var1 = CONCAT("W",STRING(#i),"_TDM_",STRING(#j),"AP") .
  var2 = CONCAT("W",STRING(#i),"_TDM_",STRING(#j),"Erg") .
  DO IF (var1=1) .
   RECODE
    var2
    (ELSE=Copy)  INTO  AMS .
  END IF .
  EXECUTE .
 END LOOP .
END LOOP .

我对SPSS语法不是很熟悉,但这是我可以工作的基本思路。 我需要的是我的PHP / Pythonish伪代码的实际工作语法代码。 : - )

1 个答案:

答案 0 :(得分:1)

要翻译您提供的代码段,这在SPSS中是等效的,它使用SPSS's Macro language facility

define !RunJob ()
!do !i = 0 !to 19
  !do !j = 1 !to 3
     do if (!concat("W", !i, "_TDM_",!j, "AP"))=1.
         recode !concat("W", !i, "_TDM_",!j, "ERG") (else=copy) into AMS.
     end if.
  !doend
!doend
!enddefine.


set mprint on.
!RunJob.
set mprint off.