问题陈述:我有一个文本文件,我想用SAS INFILE函数读取它。但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 :(得分:1)
你的问题来自于你为第二个变量指定列输入,说它应该从第3列到第12列读取。虽然它适用于前4个条目,但最后两个是短的,它读入profit
变量中name
值的开头。
由于您的文件显然不是“固定宽度”,因此您应该使用列表输入。不幸的是因为你的名字值包含空格,这可能会很棘手。正确的方法是在文本文件中引用您的名称值。然后,您可以使用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;
答案 1 :(得分: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