将变量中的某些值从分钟转换为小时,同时保持其余值不变
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的值仍然是缺失值。
谁能告诉我怎么写才行得通?
我发现您的语法中有一些错误 - 改正后看看它是否有效。
的确,recode .... (200 thru 600 = (Sleep/60))
不行,不能用一个计算作为目标值。
recode ... (5, 6= 1)
应该是 (5 6= 1)
(不需要逗号)。
IF (Sleep = (300 thru 600) & Sleep_rek = sysmis) Sleep_rek = (Sleep/60)
有几个错误:thru
是重新编码的子命令,不能这样使用,也不能这样使用“sysmis” .更正版本:
IF(睡眠>= 300 且睡眠<=600)且缺失(Sleep_rek)Sleep_rek = (Sleep/60).
你最后一次重新编码在语法方面很好,但你使用的范围似乎是错误的 - 因为你将 300 到 600 之间的数字除以 60,所以你只会得到分数值 5 到 10。然而,重新编码涵盖 4.5 以下的数字分数,并且不涵盖 5 到 7.5 之间的值(特定值除外:5、6、6.5、7)。
在一份调查问卷中,我询问了人们通常每晚睡多长时间。现在回复应该是 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的值仍然是缺失值。
谁能告诉我怎么写才行得通?
我发现您的语法中有一些错误 - 改正后看看它是否有效。
的确,
recode .... (200 thru 600 = (Sleep/60))
不行,不能用一个计算作为目标值。recode ... (5, 6= 1)
应该是(5 6= 1)
(不需要逗号)。IF (Sleep = (300 thru 600) & Sleep_rek = sysmis) Sleep_rek = (Sleep/60)
有几个错误:thru
是重新编码的子命令,不能这样使用,也不能这样使用“sysmis” .更正版本:IF(睡眠>= 300 且睡眠<=600)且缺失(Sleep_rek)Sleep_rek = (Sleep/60).
你最后一次重新编码在语法方面很好,但你使用的范围似乎是错误的 - 因为你将 300 到 600 之间的数字除以 60,所以你只会得到分数值 5 到 10。然而,重新编码涵盖 4.5 以下的数字分数,并且不涵盖 5 到 7.5 之间的值(特定值除外:5、6、6.5、7)。