将变量中的某些值从分钟转换为小时,同时保持其余值不变

Converting some values in a variable from minutes to hours while keeping the rest the same

在一份调查问卷中,我询问了人们通常每晚睡多长时间。现在回复应该是 h.mm 格式,但不小心只设置为 h。这就是为什么一些参与者以分钟为单位给出他们的睡眠持续时间,或者简单地写下“830”表示 8 小时 30 分钟。现在我想纠正这两种变化并首先尝试:


RECODE Sleep (1=1) (2=2) (3=3) (4=4) (5=5) (6=6) (7=7) (8=8) (9=9) (10=10)(11=11)(12=12)(13=13)(14=14)(801 thru 899 = 8.5) (701 thru 799 = 7.5)(200 thru 600 = (Sleep/60))
 INTO Sleep_rek.

RECODE Sleep_rek(LOWEST thru 4.5 = 0) (5, 6= 1) (6.5 thru 7 = 2) (7.5 thru HIGHEST=3)
  INTO PSQI_K3_SleepDuration.


Execute. 

因为它不起作用,我想也许 Recode 做不到,所以我尝试了这个:


RECODE Sleep (1=1) (2=2) (3=3) (4=4) (5=5) (6=6) (7=7) (8=8) (9=9) (10=10)(11=11)(12=12)(13=13)(14=14)(801 thru 899 = 8.5) (701 thru 799 = 7.5)
 INTO Sleep_rek.

IF (Sleep = (300 thru 600) & Sleep_rek = sysmis) Sleep_rek = (Sleep/60).


RECODE Sleep_rek(LOWEST thru 4.5 = 0) (5, 6= 1) (6.5 thru 7 = 2) (7.5 thru HIGHEST=3)
  INTO PSQI_K3_SleepDuration.


Execute. 

但是这也引发了错误:

The code is incomplete, check for missing operants, invalid operants, non-matching paranthesis or too long strings.

最后的PSQI_K3_SleepDuration变量被计算出来了,但是任何300到600的值仍然是缺失值。

谁能告诉我怎么写才行得通?

我发现您的语法中有一些错误 - 改正后看看它是否有效。

  1. 的确,recode .... (200 thru 600 = (Sleep/60))不行,不能用一个计算作为目标值。

  2. recode ... (5, 6= 1) 应该是 (5 6= 1)(不需要逗号)。

  3. IF (Sleep = (300 thru 600) & Sleep_rek = sysmis) Sleep_rek = (Sleep/60) 有几个错误:thru 是重新编码的子命令,不能这样使用,也不能这样使用“sysmis” .更正版本:

    IF(睡眠>= 300 且睡眠<=600)且缺失(Sleep_rek)Sleep_rek = (Sleep/60).

  4. 你最后一次重新编码在语法方面很好,但你使用的范围似乎是错误的 - 因为你将 300 到 600 之间的数字除以 60,所以你只会得到分数值 5 到 10。然而,重新编码涵盖 4.5 以下的数字分数,并且不涵盖 5 到 7.5 之间的值(特定值除外:5、6、6.5、7)。