SAS无法读取以下空格分隔文件

时间:2017-10-18 05:21:18

标签: sas

问题陈述:我有一个文本文件,我想用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读取完整的文件。 提前谢谢。

2 个答案:

答案 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