【问题标题】:Do loop following filevar option in SAS在 SAS 中循环遵循 filevar 选项
【发布时间】:2015-07-20 23:04:32
【问题描述】:
data &state.&sheet.;
            set di;
            retain &header.;
            infile in filevar= path end=done missover;  
            do until(done); 
                if _N_ =1 then
                    input  &headerlength.;      
                input &allvar.;
                output; 
            end;run;

变量路径在di数据集中。

我想将多个 txt 文件读入一个 SAS 数据集。在每个 txt 文件中,第一行是标题,我想为每个观察保留这个标题,所以我使用 if _N_ = 1 输入标题,然后输入第二行其他变量进行分析。

输出很奇怪。只有第一行包含标题,其他行不是正确的观察结果。

有人可以帮帮我吗?非常感谢。

【问题讨论】:

  • _N_ 只是数据步的计数器,所以它只取值 1 一次。
  • @mjsqu ...除非你重置它!
  • @mjsqu 非常感谢
  • 不用担心,它可能不需要完整的答案,只需朝着正确的方向轻推!

标签: sas


【解决方案1】:

我喜欢 Shenglin Chen 的回答,但这里有另一种选择:每次数据步骤开始导入新文件时,将行计数器重置为 1。

data &state.&sheet.;
            set di;
            retain &header.;
            infile in filevar= path end=done missover;  
            do _N_ = 1 by 1 until(done); 
                if _N_ = 1 then input &headerlength.;      
                input &allvar.;
                output; 
            end;
run;

如果您想对每个文件中的每个第 n 行执行不同的操作,这更容易概括。

【讨论】:

  • 非常感谢!!!有用!我认为 N 在迭代每个 txt 文件时会重置为 1。真的很感激!
  • 与盛林的回答类似,能否补充说明一下为什么这样可以解决问题?
【解决方案2】:

试试:

data &state.&sheet.;
     set di;
     retain &header.;
     infile in filevar= path end=done missover dlm='09'x; 
     input  &headerlength.; 
     do until(done); 
        input &allvar.;
        output; 
     end;
run;               

【讨论】:

    【解决方案3】:

    您应该使用 WHILE (NOT DONE) 而不是 UNTIL (DONE) 来防止读取超过文件末尾,并在文件为空时停止数据步骤。或者当文件只有标题行时的一些答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 2023-02-16
      • 2023-03-15
      • 2013-09-06
      相关资源
      最近更新 更多