2017-10-18 93 views
0

問題陳述:我有一個文本文件,我想用SAS INFILE函數讀取它。但SAS並沒有給我適當的輸出。SAS無法讀取下面的空格分隔文件

Text File: 

1 Big Bazar 15,000 
2 Hypercity 20,000 
3 Star Bazar 25,000 
4 Big Basket 30,000 
5 Grofers 35,000 
6 DMart 40,000 

,我已經試過代碼:

DATA Profit; 
INFILE '/folders/myfolders/Akki/Retain_Sum.txt'; 

INPUT Month $1 Name $3-12 Profit; 
Informat Profit COMMA6.; 
FORMAT Profit COMMA6.; 

RETAIN Cummulative_Profit; 
Cummulative_Profit = SUM(Cummulative_Profit, Profit); 
Run; 

PROC PRINT data=profit; 
Run; 

什麼我找什麼? 我想讀取SAS中的上述數據,但似乎在我的代碼中存在問題。 (當我運行我的代碼時,它會給Grofers和DMart觀察的利潤變量帶來一些缺失的值)。你能修好它嗎?我希望SAS讀取完整的文件。 在此先感謝。

+0

嗨。 「但似乎我的代碼存在問題」 - 請更接近地描述問題。它做什麼或不做?你怎麼錯了? –

+0

嗨,我剛剛編輯了這個問題。 –

回答

0

您的文件不符合與嵌入的空白LIST輸入的規則。您仍可以在不更改文件的情況下閱讀它,但必須找到名稱字段結束的列。

filename FT15F001 temp; 
data bad; 
    infile FT15F001 col=col; 
    input month @; 
    l = findc(_infile_,' ','b') - col +1; 
    input name $varying32. l profit :comma.; 
    format profit comma12.; 
    drop l; 
    parmcards; 
1 Big Bazar 15,000 
2 Hypercity 20,000 
3 Star Bazar 25,000 
4 Big Basket 30,000 
5 Grofers 35,000 
6 DMart 40,000 
;;;; 
    run; 
proc print; 
    run; 

Obs month name    profit 

    1  1  Big Bazar   15,000 
    2  2  Hypercity   20,000 
    3  3  Star Bazar   25,000 
    4  4  Big Basket   30,000 
    5  5  Grofers    35,000 
    6  6  DMart    40,000 
+0

謝謝!它像魅力一樣工作,但是你能解釋語法,因爲它很難理解。 –

1

你的問題來自於你爲第二個變量指定了列輸入的事實,並說它應該從第3列讀到第12列。雖然它適用於前4個條目,但最後兩個是兩個短條,它讀入變量nameprofit值的開始。

由於您的文件顯然不是「固定寬度」,因此您應該使用列表輸入。不幸的是,因爲你的名字值包含空格,這可能會很棘手。正確的做法是在你的文本文件中引用你的名字值。然後,您可以使用您INFILE語句dsd選項與列表輸入正確讀取這些值:

DATA Profit; 
INFILE datalines dlm=' ' dsd; 
length month $1 name $12; 
INPUT Month $ Name $ Profit; 
Informat Profit COMMA6.; 
FORMAT Profit COMMA6.; 

RETAIN Cummulative_Profit; 
Cummulative_Profit = SUM(Cummulative_Profit, Profit); 
datalines; 
1 "Big Bazar" 15,000 
2 "Hypercity" 20,000 
3 "Star Bazaar" 25,000 
4 "Big Basket" 30,000 
5 Grofers 35,000 
6 DMart 40,000 
; 
Run; 

PROC PRINT data=profit; 
Run; 
相關問題