2016-03-17 64 views
1

從一系列符號中清除自由形式文本字符串時遇到了一些問題。該任務的最後一部分涉及識別任何名稱,並將其從字符串中刪除。幸運的是,所有名稱都是U-Cased(始終),相關信息放在名稱之前(始終)。SAS - 區分大小寫字符的文本解析

我的第一個想法是使用FIND函數來隔離名稱的起始位置,然後在起始位置之前輸出所有字符......但我無法確定如何使用「通配符」選項來抓取任何大寫字母的起始位置。下面的示例和嘗試包括 -

DATA SAMPLE; 
INPUT TXT $; 
CARDS; 
firsT 
Second 
thIrd 
foUrth 
; 
RUN; 

Attempt1:

DATA TEST; 
SET SAMPLE; 
ID = FIND(TXT,'A'-'Z'); 
RUN; 

ATTEMPT2:

DATA TEST; 
SET SAMPLE; 
ID = FIND(TXT,'A-Z'); 
RUN; 

顯然,上述兩種嘗試不太遠彼此,但我找不到(或想想)另一種方法。希望有一些神祕的功能可以在這裏拯救...

回答

2

假設我明白你想做什麼,你就近了 - 只是不做'SAS'的方式。

FIND有兩個兄弟姐妹,FINDCFINDWFINDC在字符列表中找到單個字符,這聽起來像是你想要做的。它有很多用於添加字符列表的選項;你不能只給它A-Z,因爲它會添加這三個字符,但你可以給它一個U選項來添加大寫字母。

DATA TEST; 
    SET SAMPLE; 
    _endpos= FINDC(TXT,,'u'); 
    ID = substr(TXT,1,_endpos-1); 
RUN; 
+0

這是我一直在尋找的功能!只需要確認...因爲人們的名字可以以任何字母開頭......在我指定源文件(本例中爲TXT)後,我認爲空引用「,,」是我需要的「通配符」風格? – SMW

+0

空引用是顯式字符列表。 IE findc(txt ,,'u')等價於findc(txt,'ABCDEFGHIJKMNOPQRSTUVWXYZ')。如果需要,可以將可選的第三個參數與其他單個字符組合(如空格或短劃線或類似字符)。 – Joe

+0

太棒了。檢查+ 1,謝謝。 – SMW

相關問題