使用指针控制读取SAS中的原始数据

使用指针控制读取SAS中的原始数据,sas,raw-data,Sas,Raw Data,我了解如何使用指针控件在原始数据中搜索短语,然后将值读入SAS变量。我需要知道如何告诉SAS在遇到特定短语时停止读取原始数据。 例如,在下面的代码中,我只想读取短语Start和Stop之间的数据。所以果冻不应该是输出的一部分 data work.two; input @"1" Name :$32.; datalines; Start 1 Frank 6 1 Joan 2 3 Sui Stop 1 Jelly 4 5 Jose 3 ; run; 您无法真正将这些内容合并到文件的单个过程中。问

我了解如何使用指针控件在原始数据中搜索短语,然后将值读入SAS变量。我需要知道如何告诉SAS在遇到特定短语时停止读取原始数据。 例如,在下面的代码中,我只想读取短语StartStop之间的数据。所以果冻不应该是输出的一部分

data work.two;
input @"1" Name :$32.;
datalines;
Start 1 Frank 6 
1 Joan 2
3 Sui Stop
1 Jelly 4
5 Jose 3
;
run;


您无法真正将这些内容合并到文件的单个过程中。问题是
@'1'
将跳过包含
停止
的行,因此数据步骤无法看到它

预处理文件

filename copy temp;
data _null_;
  file copy ;
  retain start 0 ;
  input ;
  if index(_infile_,'Start') then start=1;
  if start then put _infile_;
  if index(_infile_,'Stop') then stop;
datalines;
Start 1 Frank 6
1 Joan 2
3 Sui Stop
1 Jelly 4
5 Jose 3
;

data work.two;
  infile copy ;
  input @"1" Name :$32. @@;
run;

您可以根据需要设置逻辑来检测源文件中要包含的部分。

所有名称都是每行左侧的第二个位置,因此可以通过扫描功能获取名称,如果行中有“停止”,则停止循环

data work.two;
input @@;
Name=scan(_infile_,-2);
if indexw(_infile_,'Stop')>0 then stop;
input;
datalines;
Start 1 Frank 6 
1 Joan 2
3 Sui Stop
1 Jelly 4
5 Jose 3
;
run;