2017-01-11 48 views
1

我有一個表如下:子字符串函數問題

PROC_TP 
112 
5255 
5255 
5255 
112 
5255 
5255 

的PROC_TP是數字與格式6,我只想要得到的第一個數字,所以我使用put功能改變成字符:

char_PROC_TP=put(PROC_TP,6.); 
format char_PROC_TP $6.; 

那麼該表是這樣的:

PROC_TP  Char_PROC_TP 
112   112 
5255   5255 
5255   5255 
5255   5255 
112   112 
5255   5255 
5255   5255 

現在char_PROC_TP是字符爲港幣$ 48格式。 然後我用SUBSTR函數爲:

first_digit=substr(char_PROC_TP,1,1); 

然後,我沒有得到任何價值。那麼,有誰能告訴我可能是什麼問題和它的解決方案。任何幫助將不勝感激。

回答

1

發生這種情況是因爲您轉換爲字符時正在創建右對齊值。您可以使用6.格式的對齊選項將其修復爲6.-L.對於第一個字符也使用第一個函數,默認長度爲1美元。

data test; 
    input PROC_TP; 
    char_proc_tp = put(proc_tp,6.-L); 
    first_digit=first(char_PROC_TP); 
    cards; 
112 
5255 
5255 
5255 
112 
5255 
5255 
;;;; 
run; 

enter image description here

4

substrN()將採取一個數字參數,並自動將其轉換爲字符並修剪爲必要的前緣和後空白。

First = SUBSTRN(num_var, 1, 1); 

查看documentation for SUBSTRN

+1

酷。鏈接似乎轉到了CATX()函數頁面而不是SUBSTRN()。以下是手冊頁中的相關文本:如果字符串是數字,則將其轉換爲使用BEST32的字符值。格式。前導和尾隨空白被刪除,並且沒有消息發送到SAS日誌。 – Tom

+1

鏈接應該固定。 – Joe

0

使用STRIP功能

char_PROC_TP=strip(put(PROC_TP,6.)); 

data test; 
Length FIRST_DIGIT $1; 
input PROC_TP; 
char_proc_tp = strip(put(proc_tp,6.)); 
first_digit=substr(char_PROC_TP,1,1); 
datalines; 
112 
5255 
5255 
5255 
112 
5255 
5255 
;