2015-09-29 70 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