2017-04-24 50 views
-1

輸入:我想單獨的名字姓氏和年齡從我的字符串中的SAS

David30Miller 
Jhonty45Rhodes 
Ahsley63Cummins 

所以名字變量應包含歲即大衛時代之前的字符應包含數字,即30和姓氏應該包含米勒。

所需的輸出:

FirstName Age Last name 
David  30 Miller 
Jhonty 45 Rhodes 
Ahsley 63 Cummins 

有人能幫忙嗎?

+1

的情況下,你嘗試過什麼?目前這看起來並不是一個好問題,特別是即使是少量的研究也可以提出一些可能性。 – Joe

回答

2

第一步:通過使用壓縮(字符串,,「KD」)提取年齡(其中KD壓縮所有的字符值留給我們的年齡)
第二步:使用年齡爲參數掃描函數,使名字和姓氏。掃描(,,):第一個參數是要處理的值,第二個參數是要提取的字符串的哪一部分,第三個參數是哪個符號用於區分(年齡)。

data abc; 
input string $50.; 
cards; 
David30Miller 
Jhonty45Rhodes 
Ahsley63Cummins 
; 
run; 

data abc; 
set abc; 
age = input(compress(string,,"kd"),best.); 
first_name =scan(string,1,age); /*or scan(string,1,,"d");*/ 
last_name = scan(string,2,age); /*or scan(string,2,,"d");*/ 
run; 

我的輸出:

|string    |age |first_name |last_name 
|David30Miller  |30  |David  |Miller 
|Jhonty45Rhodes  |45  |Jhonty  |Rhodes 
|Ahsley63Cummins |63  |Ahsley  |Cummins 

讓我知道任何疑問

+1

Stack Overflow中的一個很好的答案不是代碼,而是解釋瞭如何 - 教,不給。 – Joe

+0

不能相信你投下了正試圖幫助你的人的正確答案。我正在解釋答案,如果你能等待30多秒。無論如何,如果您不瞭解代碼的任何部分,請告訴我。總是樂於提供幫助。 –

+0

DV是我,而不是OP。我認爲這樣更好一些,但請閱讀[常見問題]和[答案];這仍然只是將代碼提供給一個被問及不好問題的人。我也建議在掃描功能中沒有理由使用年齡;這是糟糕的設計,因爲它會導致不必要的數字轉換。改爲使用'd''第四個參數。 – Joe

相關問題