2017-10-18 40 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; 
相关问题