【问题标题】:Reading Raw Data in SAS using pointer control使用指针控制读取 SAS 中的原始数据
【发布时间】:2018-03-22 20:44:23
【问题描述】:

我了解如何使用指针控制在原始数据中搜索短语,然后将值读入 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;

【问题讨论】:

    标签: sas raw-data


    【解决方案1】:

    您不能真正将它们组合成一次通过文件。问题是@'1' 将跳过其中包含STOP 的行,因此您的数据步骤无法看到它。

    预处理文件。

    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;
    

    您可以根据需要使逻辑来检测要包含的源文件的哪些部分。

    【讨论】:

      【解决方案2】:

      所有的名字都是每行左起第二个位置,所以名字可以通过scan函数得到,如果行中有'Stop'则停止循环。

      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;
      

      【讨论】:

        猜你喜欢
        • 2015-09-16
        • 2020-04-03
        • 1970-01-01
        • 1970-01-01
        • 2013-07-30
        • 1970-01-01
        • 2011-09-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多