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

SAS无法读取以下以空格分隔的文件,sas,Sas,问题陈述:我有一个文本文件,我想使用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

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

您的问题来自于您正在为第二个变量指定列输入,并说它应该从第3列到第12列读取。虽然它适用于前4个条目,但后两个条目较短,它读取名称变量中利润值的开头

由于文件的宽度显然不是固定的,所以应该使用列表输入。不幸的是,由于您的名称值包含空格,这可能会很棘手。正确的方法是在文本文件中引用名称值。然后,您可以使用INFLE语句上的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;

您的文件不符合嵌入空格的列表输入规则。您仍然可以在不更改文件的情况下读取它,但必须找到名称字段结束的列

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

你好但是我的代码中似乎有一个问题——请更仔细地描述这个问题。它做什么或不做什么?这对你有什么错?嗨,我刚刚编辑了这个问题。非常感谢!它很有魅力,但是你能解释一下语法吗?因为它很难理解。