我有很多SAS格式的文件,我希望能够在SAS之外的程序中读取它们.除了安装基础SAS系统之外,我什么都没有.我可以手动转换每一个,但我想要一种自动执行的方法.
您需要运行SAS会话才能充当数据服务器.然后,您可以使用ODBC访问SAS数据,请参阅SAS ODBC驱动程序指南.
要运行本地SAS ODBC服务器,您需要:
在服务文件中添加一个条目(C:\ WINDOWS\system32\drivers\etc\services),如下所示:
...设置端口号(此处为:9191),使其适合您的本地设置.服务"loclodbc"的名称必须与ODBC设置中定义的服务器名称匹配.请注意,术语"服务器"与PC的物理主机名无关.
您的SAS ODBC服务器现在已准备好运行,但没有可用的已分配数据资源.通常,您可以在SAS ODBC设置过程的"库"选项卡中进行设置,但由于您希望"即时"指向数据源,因此我们省略了这一点.
从客户端应用程序,您现在可以连接到SAS ODBC服务器,指向要访问的数据资源,并获取数据.
SAS指向数据资源的方式是通过"LIBNAME"的概念.libname是指向数据集合的逻辑指针.
从而
LIBNAME sasadhoc 'C:\sasdatafolder';
Run Code Online (Sandbox Code Playgroud)
将文件夹"C:\ sasdatafolder"分配给逻辑句柄"sasiodat".
如果您从SAS内部想要访问驻留在SAS数据表文件"C:\ sasdatafolder\test.sas7bdat"中的数据,那么您将执行以下操作:
LIBNAME sasadhoc 'C:\sasdatafolder';
PROC SQL;
CREATE TABLE WORK.test as
SELECT *
FROM sasadhoc.test
;
QUIT;
Run Code Online (Sandbox Code Playgroud)
所以我们需要做的是告诉我们的SAS ODBC服务器从我们的客户端应用程序为C:\ sasdata文件夹分配一个libname.我们可以通过使用DBCONINIT参数在启动时向它发送此资源分配请求来完成此操作.
我已经为此做了一些示例代码.我的示例代码也是用BASE SAS语言编写的.由于显然有更多聪明的方式来访问SAS数据,而SAS通过ODBC连接到SAS,因此该代码仅作为示例.
您应该能够在您正在使用的编程环境中使用有用的位并创建自己的解决方案...
SAS ODBC连接示例代码:
PROC SQL;
CONNECT TO ODBC(DSN=loclodbc DBCONINIT="libname sasadhoc 'c:\sasdatafolder'");
CREATE TABLE temp_sas AS
SELECT * FROM CONNECTION TO ODBC(SELECT * FROM sasadhoc.test);
QUIT;
Run Code Online (Sandbox Code Playgroud)
神奇的事情发生在代码的"CONNECT TO ODBC ..."部分,将libname分配给所需数据所在的文件夹.