谁能帮我写一个 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使用双向链表的,谁能帮我写一个迭代器。