【问题标题】:Can anyone help me write a R data frame as a SAS data set?谁能帮我写一个 R 数据框作为 SAS 数据集?
【发布时间】:2011-07-25 12:17:00
【问题描述】:

在 R 中,我使用了 foreign 库中的 write.foreign() 函数来将数据框写入 SAS 数据集。

write.foreign(df = test.df, datafile = 'test.sas7bdat', codefile = 'test.txt', package = "SAS")

SAS 数据文件已写入,但当我尝试在 SAS Viewer 9.1 (Windows XP) 中打开它时,我收到以下消息 - “不支持 SAS 数据集文件格式”。

注意:我一般不熟悉 SAS,所以如果存在普通 SAS 用户应该知道的答案,请原谅我的无知。

【问题讨论】:

    标签: r sas dataset


    【解决方案1】:

    write.foreign 带有选项package="SAS" 实际上会写出一个逗号分隔的文本文件,然后创建一个带有 SAS 语句的脚本文件以将其读入。您必须运行 SAS 并提交脚本才能将文本文件转换为SAS 数据集。你的电话应该看起来更像

    write.foreign(df=test.df, datafile="test.csv", codefile="test.sas", package="SAS")
    

    注意不同的扩展名。此外,write.foreign 将因子变量写为具有控制其外观的格式的数字变量——即因子的 R 定义。如果您只想要字符表示,则必须在导出前通过as.character 转换因子。

    【讨论】:

    • +1 以获得真正的最佳答案,但那不应该是datafile = "test.sas7bdat"吗?
    • @Matt: 不,datafile 是写入的文本文件的名称。如果要指定 SAS 将从该文本文件创建的 SAS 数据集的名称,则必须使用 dataname 参数(默认为“rdata”,无扩展名)。
    • 嗯 - 我认为它需要具有 .sas7bdat 扩展名,而我几天前才这样做。经过仔细检查,我所拥有的只是一个扩展名为 .sas7bdat 的 CSV 文件,SAS 完全忽略了它。感谢您的澄清。
    • 这是一种很好的处理方式。我个人发现的唯一缺点是,如果您从服务器运行 SAS,R 生成的用于读取 csv 文件的 INFILE 语句在 SAS EG for SAS 9 中不起作用。所以在我的情况下,它试图从服务器读取我创建的文件,而不是我的本地机器,这很烦人。我还没有找到解决方法,但如果我找到了,我一定会在这里分享。
    【解决方案2】:

    我也不是 SAS 用户,但我之前使用过 write.xport(),它运行良好。我粗略的理解是 SAS 文件有两种类型,内部文件和 XPORT 文件。 XPORT 是在不同版本、架构等之间更兼容的那些。

    【讨论】:

    • 最初,当我尝试 write.xport() 时,我遇到了相同的错误消息。但是当我将文件扩展名从“sas7bdat”更改为“xpt”时,它就像一个魅力。感谢您的帮助。
    • @Jubbles:太好了,很高兴它成功了。扩展(尤其是在 Windows 上)可能会很痛苦。大多数时候,它们是必要的,但还不够。
    【解决方案3】:

    这是对 Hong Ooi 答案的修改。

    在 R 中:

    library(foreign)

    write.foreign(df=test.df, datafile="test.csv", codefile="test.sas", package="SAS")

    在 SAS 中:

    同时上传 test.csv 和 test.sas 文件。打开 test.sas。您可能必须编辑从 write.foreign 函数输出的 test.sas 代码。对我有用的是更新INFILE 行以包含库/位置: "/home/kristenmae0/test.csv"

    【讨论】:

      【解决方案4】:

      您可以使用 SAS 轻松完成:只需使用 SAS/IML (proc iml) 或 IMLPlus(面向对象的版本)使用 SAS/IML Studio 进行测试。

      看到这个: http://support.sas.com/documentation/cdl/en/imlsstat/63827/HTML/default/viewer.htm#imlsstat_statr_sect004.htm

      或免费下载 SAS/IML Studio: http://www.sas.com/apps/demosdownloads/92_SDL_sysdep.jsp?packageID=000721 此版本的 SAS/IML Studio 提供了与 R 语言交互的功能。

      【讨论】:

      • 除非 SAS/IML Studio 中存在将 R 对象(您提供的从 SAS 到 R 的文档功能的第一个链接)转换为 SAS 数据文件对象(或其功能等效),我觉得您错过了我的问题的重点。我想将 R 数据帧转换为 SAS 可用的格式。为了给您提供背景信息,我对 R 比 SAS 感到满意,并且更喜欢 R,但许多同事更喜欢 SAS 并且需要使用我的数据。
      • @Jubbles:IML/IML Studio 可以双向转换:SAS 到 R,以及 R 到 SAS。
      • @Hong Ooi:谢谢!在与 SAS 同事合作时,我会牢记这一点。
      猜你喜欢
      • 1970-01-01
      • 2015-10-26
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      相关资源
      最近更新 更多