【问题标题】:How to import a fixed-width text file (with many variables) which the layout is stored in a SAS File (.sas)?如何导入布局存储在 SAS 文件 (.sas) 中的固定宽度文本文件(包含许多变量)?
【发布时间】:2020-11-10 01:15:46
【问题描述】:

我不明白如何处理以下文件:

  • 一个 .sas 文件,其中包含每个变量的位置 -column- 和长度(我有 500+);和
  • 包含这些变量值的文本文件(我有超过 120k 的观察值)。

我已经发布了一个关于此的问题,似乎合并变量名称和值的唯一方法是手动完成。问题是我这几天一直在尝试解决这个问题并且经常犯错误。

有没有人知道如何解决这个问题并使用 python pandas 自动导入?

.sas 文件(在 WPS 工作台中打开)如下所示:

DATA YOUR_DATA;
INFILE 'C:\Users\...\file.txt';
    
 ***Column   VarName   Varlength      VarLabel***
    @18      PROFAM    6.             /*  progressivo famiglia univoco a livello indagine                                                                                                                                                           */                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
    @24      PROIND    2.             /*  progressivo individuo nell'ambito della famiglia                                                                                                                                                          */                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
    @29      NCOMP     2.             /*  n° dei componenti la famiglia attuale                            

其中Column VarName Varlength VarLabel不在真实代码中,这里加了解释代码。

【问题讨论】:

  • 你能分享一些你的要求的例子
  • 在问题中放一个 SAS 代码示例,我建议您展示一个您想要编写的代码示例 - 您手工编写的内容 - 以展示您想要的内容生成。
  • @Joe 我编辑了添加 SAS 文件开头的问题。我不知道如何在 sas 中编码,所以我不能分享我写的任何东西。我唯一要生成的是一个数据集(在 pandas 中很容易访问),其值存储在列中,并在其变量名的顶部。

标签: sas txt


【解决方案1】:

一种方法是:

  1. 下载WPS Workbench Community edition。 WPS Workbench是一个读取sas文件的软件。如果您在某些学院/大学就读,您还可以下载学术版(无广告且具有额外功能)。安装并设置后,打开它。

  2. 在 WPS 环境中,打开 .sas 程序:单击 File -> Open File 并选择您的 .sas 文件,该文件将在 WPS 中打开。像这样设置三行:

DATA YOUR_DATA;
INFILE 'C:\Users\...\path_to_your_file\YOURDATA.TXT' LRECL=978 MISSOVER;
INPUT
 @18  PROFAM  6.  /*  progressivo famiglia univoco a livello indagine */                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
 @24  PROIND  2.  /*  progressivo individuo nell'ambito della famiglia*/ 

只需在第一行选择您想要的数据名称,然后在第二行输入.txt 文件的正确路径即可。

2.1 通过以下方式更正代码:删除 INPUT 语句和第一行数据之间的行 ***Column VarName Varlength VarLabel***

2.2 检查最后一个变量后的最后两行,应该是这样结束的:

@235 NCOMPL  8. /*  n° rendimento la famiglia attuale */
;
run;

如果不是,添加上面的最后两行。

  1. 编写导出数据的语法.csv。只需在.sas程序文件的末尾写下如下代码:
proc export data=YOUR_DATA
     outfile="c:\myfiles\YourData.csv"
     dbms=csv 
     replace;
run;

确保在第一行再次写入文件的正确名称(您选择的名称),并在第二行写入您希望保存 .csv 文件的正确路径。

ctrl + R 运行代码,或单击运行按钮。在Save and run WPS 对话框中单击Ok

  1. 最后,在 Pandas 中打开.csv

【讨论】:

  • 谢谢@LuizZ!我仍然有一些问题。我按照你说的做了,但遇到了这个错误:ERROR: Found "@" when expecting ; ERROR: Found "@" when expecting a statement ERROR: Found "18" when expecting a statement ERROR: The statement "PROFAM" is unknown in this context'我编辑了问题,添加了 sas 文件的开头,以便你可以更好地了解我的问题。
  • @Luca,可能只是缺少一个分号;。检查第一行和第二行的末尾是否有分号。如果没有,请在此处添加。
  • 再次感谢。我按照你说的做了:添加了一个分号并将前两行更新如下:DATA YOUR_DATA; INFILE 'C:\Users\file path\file_name.txt' LRECL=978 MISSOVER; 但是,错误发生了变化但仍然存在:ERROR: Found "@" when expecting a statement ERROR: Found "18" when expecting a statement ERROR: The statement "PROFAM" is unknown in this context 。很抱歉,我真的不知道 SAS 是如何工作的。
  • 好的,刚刚看到你的编辑。您也缺少输入语句,也将其添加到我的答案中
  • 在意大利语中我们说 Grazie mille(一千谢谢)!你确实解决了我的问题,干杯!
猜你喜欢
  • 1970-01-01
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多