2010-03-03 50 views
9

我有很多SAS格式的文件,我希望能够在SAS之外的程序中读取它们。我除了安装基本SAS系统外没有其他任何东西。我可以手动转换每一个,但我想要一种方法自动执行。如何读取SAS数据集?

+0

你想吃点什么程序/格式阅读呢?你将使用哪种编程语言? – 2010-03-03 19:19:09

+0

我正在使用Python。我没有指定程序或格式,因为我不想限制回应;如果有方法通过DLL或API读取数据,我相信我可以弄清楚如何调用它。但是,我无法找到任何方法,无需从SAS获得许可其他程序。 – 2010-03-03 20:07:32

+0

会写一个SAS宏将每个计数转换为自动解决方案吗? – 2010-03-04 08:19:57

回答

6

您需要有一个正在运行的SAS会话充当数据服务器。然后您可以使用ODBC访问SAS数据,请参阅SAS ODBC drivers guide

为了获得本地SAS ODBC服务器上运行,你需要:

  1. 在SAS ODBC驱动程序指南描述定义你的SAS ODBC服务器设置。在下面的例子中,我将连接到一个名为“loclodbc”的服务器。
  2. 在你的服务文件中添加一个条目,(C:\ WINDOWS \ SYSTEM32 \ DRIVERS \ etc \ services中),就像这样:

    • loclodbc 9191/TCP

    ...集端口号(这里是:9191),以便它适合您的本地设置。服务“loclodbc”的名称必须与ODBC设置中定义的服务器名称匹配。请注意,术语“服务器”与您的PC的物理主机名无关。

您的SAS ODBC服务器现在可以运行,但没有可用的分配数据资源。通常情况下,您可以在SAS ODBC设置过程中的“库”选项卡中设置此选项,但由于您要“即时”指向数据源,因此我们忽略了这一点。

在您的客户端应用程序中,您现在可以连接到SAS ODBC服务器,指向要访问的数据资源并获取数据。

SAS指向数据资源的方式是通过“LIBNAME”的概念。 libname是一个数据集合的逻辑指针。

因此

LIBNAME sasadhoc 'C:\sasdatafolder'; 

分配的文件夹 “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; 

因此,我们需要要做的是告诉我们的SAS ODBC服务器从我们的客户端应用程序分配一个libname到C:\ sasdatafolder。我们可以通过使用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; 

神奇的发生在代码的“CONNECT TO ODBC ...”部分,将libname分配给所需数据所在的文件夹。

+0

实际上,你不需要运行SAS会话; ODBC驱动程序会自动为您启动一个。但是,以编程方式创建ODBC配置并不容易,所以必须手动配置。这是一个问题,因为您不能只加载任意数据集。 – 2010-03-11 20:15:01

+0

任意,你可能的意思是“位于任何地方,任何名称”...?或者它是作为参数给出的? – 2010-03-11 21:46:52

+0

位于任何地方,任何名称。 – 2010-03-12 00:03:42

2

我想你可能能够使用ADO, 查看SAS support site了解更多详情。

免责声明:

  1. 我没有看过这一段时间
  2. 我不是100%肯定,这并不需要额外的许可
  3. 我不知道,如果你能做到这一点使用Python
2

我从来没有尝试过http://www.oview.co.uk/dsread/,但它可能是你在找什么:“一个简单的命令行实用程序,用于在SAS7BDAT文件格式的数据集进行操作。”但请注意“这个软件应该被认为是实验性的,并不能保证是准确的,你自己承担风险,它只能在未压缩的Windows格式SAS7BDAT文件上工作。”

3

您可以制作一个SAS到CSV的转换程序。

保存在sas_to_csv.sas如下:

proc export data=&sysparm 
    outfile=stdout dbms=csv; 
run; 

然后,假设你想按如下方式访问libname.dataset,这个程序叫做:

sas sas_to_csv -noterminal -sysparm "libname.dataset" 

的SAS数据转换成CSV可以输送到Python。在Python中,以编程方式生成“libname.dataset”参数将非常简单。