【问题标题】:SPSS syntax: recode in nested loopSPSS语法:在嵌套循环中重新编码
【发布时间】:2015-10-22 09:05:05
【问题描述】:

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

在我的 SPSS 数据库中,我获得了不同药物的血药浓度测量值(每周 3 次,超过 20 周)。 我想为每种物质创建箱线图,使用重新编码为每种物质生成一个新变量。

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

因此可以通过 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.
  }
} 

我的基本想法是:嵌套循环并在内循环上执行重新编码。由于 $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 伪代码的实际工作语法代码。 :-)

【问题讨论】:

  • 为什么要将其拆分为一组变量?每种药一个?采用长格式不是更可取吗(据我所知——尽管有任何明确提及)。可能值得准确描述文件结构和您的最终目标。
  • 不,我需要汇总/收集一种物质的所有测量值(每周 3 次,持续 20 周),然后根据收集到的这个新变量的数据创建箱线图。我可以通过 GUI 重新编码来做到这一点,就像一个魅力,但对于每次测量,我都必须再次点击所有内容(一种物质 60 次),所以这对于嵌套循环来说是完美的工作,它通过周和测量值重新编码到相同的新变量(此处称为 AMS)中。我的最终目标是将所有匹配的测量值重新编码到一个新变量中。 :)
  • 这里不能SPLIT FILE 对你有用吗?
  • 好主意,但拆分后我会和现在一样,因为我仍然需要重新编码箱线图的所有测量值。我将拥有一种物质的所有相关数据,但它分布在 20 周内的所有测量中。

标签: loops spss recode


【解决方案1】:

要翻译您提供的代码的 sn-p,这将是 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.

【讨论】:

    猜你喜欢
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 2022-11-19
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多