【问题标题】:Import unsorted data from a notepad file(.txt) into SaS将记事本文件 (.txt) 中的未排序数据导入 SaS
【发布时间】:2016-11-24 23:21:58
【问题描述】:

我有一个大文本文件,其中包含 3 个表格。文件中的记录未排序,文件中的记录与以空格分隔的列名一致。表格不断重复,直到最后。我想将正确表下的记事本文件中的数据导入 SAS。我想从文本文件中读取记录和列名,并将它们放在正确的 SAS 表中。我尝试通过 INFILE 并且成功地将数据导入 SAS,但是由于列未排序并且表正在重复,因此很难将记录保存在 SAS 中的正确表下。我是 SAS 的初学者,任何帮助将不胜感激。

以下是文本文件中的数据示例

 ABCD - ABCD          ----     Table 1                                                                         

 Column1           xxxxxxxxxxxxxxxxxxx                     Column3 xxxxxxxxxxxx                                                 
 Column2          x                                        Column4 xx

  ABCD - ABCD          ----     Table 2                                                                       

 Column1           xxxxxxxxxxxxxxxxxxx                     Column3   xxxxxxxxxxx                                                
 Column2          x                                        Column4 xx

  ABCD - ABCD          ----     Table 3                                                                       

 Column1           xxxxxxxxxxxxxxxxxxx                     Column3   xxxxxxxxxxxxxxx                                                
 Column2          x                                        Column4 xx

  ABCD - ABCD          ----     Table 1                                                                         

 Column1           xxxxxxxxxxxxxxxxxxx                     Column3   xxxxxxxxxxxxxx                                                 
 Column2          x                                        Column4 xx

  ABCD - ABCD          ----     Table 2                                                                         

 Column1           xxxxxxxxxxxxxxxxxxx                     Column3   xxxxxxxxxxxxxxxxxx                                                 
 Column2          x                                        Column4 xx

  ABCD - ABCD          ----     Table 3                                                                         

 Column1           xxxxxxxxxxxxxxxxxxx                     Column3   xxxxxxxxxxxxxxxxxxxx                                               
 Column2          x                                        Column4 xx

【问题讨论】:

  • 您需要提供您想要的输出示例。您可能还需要更清楚地了解您希望将该文件的哪些部分作为数据读取。你事先知道变量名吗?
  • 我正在尝试导入包含未排序数据的文本文件。列和针对该列的数据在同一行中,由空格“”分隔。大约有 100 列。这些表以相同的列名重复,但具有不同的数据,直到文件结束。上面的示例显示了输入文件,我需要在 SAS 中以正确的表格形式输出。
  • 这个 TXT 文件似乎是一个软件系统转储文件。是否有其他可用的格式类型,例如 XML/JSON 的相同数据,因为此文件看起来有点树型结构?
  • 感谢您回答问题,我们没有来源,我们每天只能以这种格式获取此文件。除此文件外,数据不会存储在任何地方,我们希望这些数据可供我们使用以执行不同的分析。这就是在 SAS 中导入文件的原因。谢谢

标签: import sas text-files


【解决方案1】:

通常在阅读报告时,您会希望有逻辑来检测您在报告中的位置。您可能希望从标题行中读取和保留值。通常这可能包括报告日期、报告所针对的个人,或者在您的情况下,数据来自报告的哪一部分。

data step1 ;
  infile 'myfile.txt' truncover ;
  input @;
  * eliminate blank lines ;
  if _infile_ = ' ' then delete;
  * Read the TABLE name ;
  if substr(_infile_,23,6) = ' ---- ' then do;
    block+1;
    input @33 table_name $32.;
    retain table_name;
    delete;
  end;
  else do;
    * Read two values from each line ;
    input @2 varname $20. value $50. @;
    output;
    input @59 varname $20. value $50. ;
    output;
  end;
run;

然后您可以添加步骤来排序和转置。

 proc sort data=step1 out=step2;
   by table_name block varname ;
 run;
 proc transpose data=step2 out=step3;
   by table_name block;
   id varname;
   var value;
 run;

【讨论】:

  • 输入@2 varname $20。价值 50 美元。 @;输出;为什么输入语句末尾需要这个“@”?当您不指向输入语句时,我对为什么需要 @ 感到困惑
  • 使用尾随 @ 以便 SAS 为下一个 INPUT 语句保留该行。这样程序在读取报告的左列和右列时可以使用相同的变量名。同样的原因,在第一个 INPUT 语句后面有一个 @。
  • 谢谢。这和@@有同样的影响吗?
  • 双尾 @ 将导致 SAS 在进入数据步骤的下一次迭代时保持同一行。只有一个 @ 输入行与数据步循环一起释放。
  • 顺便说一句,我在 .txt 中编写了相同的文件并运行了该代码,但它不起作用
猜你喜欢
  • 2021-02-26
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
  • 2014-11-09
  • 2016-04-08
  • 2016-02-16
  • 2018-12-23
  • 2015-02-22
相关资源
最近更新 更多