2015-09-29 45 views
0

我不明白sas是如何计算患者的值的,我查看处处都有,但似乎没有关于sas的文档,在括号内计算公式,我只知道当 PATIENT的值甚至是CASE表达式的布尔结果是1,0或2,但我只是不知道如何从表达式中获得值,请问有人能解释一下吗?sas如何计算case语句的值

PROC SQL; 
CREATE TABLE TESTMED AS 
SELECT PATIENT, 
CASE ((PATIENT/2 = INT(PATIENT/2)) + 
(PATIENT = .)) 
WHEN 1 THEN 'Med A' WHEN 0 THEN 
'Med B' ELSE 'Error' END AS DOSEGRP 
LENGTH=5 
FROM VITALS 
ORDER BY PATIENT; 
QUIT; 
+0

我想你应该有,因为这部分'的MySQL错误'!? - 在MySQL中(1 = 1)等于'1';)。 –

+0

您能否为我们提供一些患者价值?我看不到该代码中的任何错误。 – stat

回答

0

我看不到任何错误。

如果病人可以。 0 1 2这将是(第一个表达式+第二表达):

0 ---> {0=0}true(1) + {patient=.} false(0) = 1 
1 ---> {0.5=0}false(0) + {patient=.} false(0) = 0 
2 ---> {1=1}true(1) +{patient=.} false(0) = 1 
. ---> {.=.} true(1) + {patient=.} true(1) = 2 

如果要看到,布尔表达式可以简单地使用的结果:

PROC SQL; 
CREATE TABLE TESTMED AS 
SELECT patient, 
    ((PATIENT/2 = INT(PATIENT/2)) + (PATIENT = .)) AS result 
LENGTH=5 
FROM VITALS 
ORDER BY PATIENT; 
QUIT; 

,你会看到结果是正确的。 所以,你的布尔表达式可以假设只有3个值:

(1=0+1) 
(0=0+0) 
(2=1+1) 

When 0 you assign MEDA; 
When 1 you assign MEDB; 
When 2 you assign ERROR; 

和错误分配缺失值。

1st expression: 
{missing/2=missing} = {int(missing)=missing} [errors are reported as missing] 
missing=missing ---> true ---> 1 

2nd expression: 
missing=missing ---> true ---> 1 

result: 
1+1=2 ---> ERROR 
0

SAS将布尔表达式计算为1(真)或0(假)。所以你的表达式是其中两个的总和。所以可能的答案是0,1或2.

当患者偶数或缺失时,第一个表达式(PATIENT/2 = INT(PATIENT/2))将为真。当患者缺失时,第二个表达式(PATIENT = .)将为真。所以2的结果意味着患者缺少1的结果意味着患者是偶然的,并且结果0意味着患者是奇数的。

所以,你可以重写case语句为:(病人=)

CASE WHEN MISSING(PATIENT) then 'Error' 
    WHEN MOD(PATIENT,2)=1 then 'Med A' 
    ELSE 'Med B' 
END AS DOSEGRP