是否可以将SAS infile语句转换为R代码?

时间:2014-05-06 22:57:29

标签: r sas file-io

我对SAS的了解不存在,我通常在R和Stata工作。最近我下载了一个可以从巴西政府公开获得的数据集,由于某种原因,他们以原始格式提供了SAS脚本以供阅读:

DATA DOM (COMPRESS = YES);
INFILE "...¥T_DOMICILIO_S.txt" LRECL = 164 MISSOVER;     

INPUT  @001 TIPO_REG    $2.   /* TIPO DE REGISTRO  */
       @003 COD_UF      $2.   /* CモDIGO DA UF      */         
       @005 NUM_SEQ     $3.   /* NレMERO SEQUENCIAL */
       @008 NUM_DV      $1.   /* DV DO SEQUENCIAL  */                

…Etc etc…

RUN;

是否可以将此语句转换为r的等效语句?如果是这样,我应该找哪个功能?

3 个答案:

答案 0 :(得分:11)

有一个应用程序!无论如何,一个R包,SAScii,由不屈不挠的安东尼达米科带给你。它有两个功能:parse.SASciiread.SAScii。我在美国gummint CDC文件上取得了巨大的成功。

install.packages("SAScii")
library(SAScii)

> parse.SAScii("test.sas")
   varname width char divisor
1 TIPO_REG     2 TRUE       1
2   COD_UF     2 TRUE       1
3  NUM_SEQ     3 TRUE       1
4   NUM_DV     1 TRUE       1
Warning message:
In readLines(sas_ri) : incomplete final line found on 'test.sas'

- 然后,您将需要使用read.SAScii进行第二步,但是您没有为该测试提供适当的测试文件。

输入文件' test.sas'是:

DATA DOM (COMPRESS = YES);
INFILE "...¥T_DOMICILIO_S.txt" LRECL = 164 MISSOVER;     

INPUT  @001 TIPO_REG    $2.   /* TIPO DE REGISTRO  */
       @003 COD_UF      $2.   /* CモDIGO DA UF      */         
       @005 NUM_SEQ     $3.   /* NレMERO SEQUENCIAL */
       @008 NUM_DV      $1.   /* DV DO SEQUENCIAL  */                

RUN;

如果您查看"twotorials" on Youtube by Anthony Damico或转到his website,您就会明白为什么我使用了“#34; indomitable"”这个词。

答案 1 :(得分:9)

对你问题的其他回答更好,因为它们更为一般。但是你要特别询问ibge的pesquisa或者家庭...我已经编写了代码,将2002-2003和2008-2009的所有直接导入R而不再赘述。 :)只需按照顶部的说明操作,运行下载脚本,所有内容都将正确加载到R中。

https://github.com/ajdamico/usgsd/tree/master/Pesquisa%20de%20Orcamentos%20Familiares

http://www.asdfree.com/search/label/pesquisa%20de%20orcamentos%20familiares%20%28pof%29

答案 2 :(得分:5)

SAS有比R更多的输入选项,因此有时可能难以进行直接翻译;但您可以考虑查看the SAScii package来帮助您创建对read.fwf的调用