谁能帮我写一个 R 数据框作为 SAS 数据集?

Posted

技术标签:

【中文标题】谁能帮我写一个 R 数据框作为 SAS 数据集?【英文标题】:Can anyone help me write a R data frame as a SAS data set? 【发布时间】: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 用户应该知道的答案,请原谅我的无知。

【问题讨论】:

【参考方案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 同事合作时,我会牢记这一点。

以上是关于谁能帮我写一个 R 数据框作为 SAS 数据集?的主要内容,如果未能解决你的问题,请参考以下文章

我在自己写一个STL,其中的list使用双向链表的,谁能帮我写一个迭代器。

谁能帮我写一个java的回调函数的例子

Delphi2010的DataSnap,非常非常郁闷的问题,谁能帮我?

macbook pin码解锁 谁能帮我解开

谁能帮我写个毕业论文(英语翻译)可以的话2000分酬谢

c++ 停车场问题 谁能帮我写一下啊