2017-09-16 64 views
2

這個代碼選擇其選擇診斷的範圍內的情形(這裏的範圍是7567至75679)針對其存儲診斷代碼(這裏DX1,DX2,DX3多個列。 ...等等。)。下面的作品,但它是痛苦,當我在尋找診斷的新範圍每次修改代碼。我如何縮短代碼?如何縮短SPSS代碼針對多個ICD代碼進行比較來多種診斷柱

IF (RANGE(DX1,'7567','75679') | RANGE(DX2,'7567','75679') | RANGE(DX3,'7567','75679') | RANGE(DX4,'7567','75679') | RANGE(DX5,'7567','75679') | RANGE(DX6,'7567','75679') | RANGE(DX7,'7567','75679') |RANGE(DX8,'7567','75679') 
| RANGE(DX9,'7567','75679') | RANGE(DX10,'7567','75679') | RANGE(DX11,'7567','75679') | RANGE(DX12,'7567','75679') | RANGE(DX13,'7567','75679') | RANGE(DX14,'7567','75679') | RANGE(DX15,'7567','75679') 
| RANGE(DX16,'7567','75679') | RANGE(DX17,'7567','75679') | RANGE(DX18,'7567','75679') | RANGE(DX19,'7567','75679') | RANGE(DX20,'7567','75679') | RANGE(DX21,'7567','75679') | RANGE(DX22,'7567','75679') | RANGE(DX23,'7567','75679') 
| RANGE(DX24,'7567','75679') | RANGE(DX25,'7567','75679'))ABDWALDEF=1. 
EXECUTE. 
+0

什麼是確切的李你試圖找到哪些代碼?如果它們都是字符串,則「範圍」可能無法按預期工作。 –

回答

1
count ABDWALDEF= DX1 to DX25 ('7567' thru'75679'). 
exe. 
if ABDWALDEF>1 ABDWALDEF=1. 
exe. 

就個人而言,我不會在SPSS reccomend串範圍。你只需要確保你知道你在做什麼,因爲串範圍從數值範圍是不同的:

就拿代碼756780:

  • 如果臺DX是數字。它不會配合到(7567,75679)範圍,因爲756780> 75679。
  • 如果臺DX是字符串,它將安裝到相同的範圍內的字符串,因爲串是基於第一個字符,然後是第二排序,依此類推。拳頭4個字符是相同的,並且在第五位置有「9」>「8」。因此,在字符串,「75679」> 「756780」。因此,756780將是你的範圍

正如@在評論中提到禮-K的一部分,你真的確定要與NUMERICA範圍,而不是字符串的工作範圍:

如果所有的代碼是真正的文本格式的數字,你不妨 其更改爲數字,一切都變得更容易:

alter type DX1 to DXn (f10).

+1

如果所有的代碼都是文本格式的數字,那麼您可以將它們更改爲數字,並且一切都變得更簡單:'將DX1類型更改爲DXn(f10).' –

+1

@ eli-k:非常真實。但是我已經看到了類似這樣的類別跟蹤系統:7567是類別代碼,並且後面的任何內容都是子類別75671到7567999.也許每個數字位置都有不同的含義,然後按字符串排序它們是有意義的。這就是爲什麼我提到OP必須確定他們試圖達到的目標。 –

+1

好電話!如果是這樣的情況,將有可能使用'如果char.substr(DXN,1,4)=「7567」 ...'捕捉類別和所有它的子類。 (把它放在所有DX的循環中) –