Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何读取SAS数据集?_Sas - Fatal编程技术网

如何读取SAS数据集?

如何读取SAS数据集?,sas,Sas,我有很多SAS格式的文件,我希望能够在SAS以外的程序中读取它们。除了基本的SAS系统,我什么都没有安装。我可以手动转换每一个,但我想有一种自动转换的方法。我想您可以使用ADO, 有关更多详细信息,请参阅 免责声明: 我有一段时间没看这个了 我不是100%确定这不需要额外的许可 我不确定您是否可以使用Python实现这一点 我从未尝试过,但它可能正是您想要的:“一个用于处理SAS7BDAT文件格式数据集的简单命令行实用程序。”但请注意“该软件应被视为实验性的,不能保证其准确性。你使用它的风险由你

我有很多SAS格式的文件,我希望能够在SAS以外的程序中读取它们。除了基本的SAS系统,我什么都没有安装。我可以手动转换每一个,但我想有一种自动转换的方法。

我想您可以使用ADO, 有关更多详细信息,请参阅

免责声明:

  • 我有一段时间没看这个了
  • 我不是100%确定这不需要额外的许可
  • 我不确定您是否可以使用Python实现这一点

  • 我从未尝试过,但它可能正是您想要的:“一个用于处理SAS7BDAT文件格式数据集的简单命令行实用程序。”但请注意“该软件应被视为实验性的,不能保证其准确性。你使用它的风险由你自己承担。目前它只适用于未压缩的Windows格式SAS7BDAT文件。“

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

    要使本地SAS ODBC服务器运行,您需要:

  • 按照《SAS ODBC驱动程序指南》中的说明,在上定义SAS ODBC服务器设置。在下面的示例中,我将连接到名为“loclodbc”的服务器
  • 在服务文件中添加一个条目(C:\WINDOWS\system32\drivers\etc\services),如下所示:

    LIBNAME sasadhoc 'C:\sasdatafolder';
    PROC SQL;
      CREATE TABLE WORK.test as
      SELECT *
      FROM sasadhoc.test
      ;
    QUIT;
    
    • loclodbc 9191/tcp
    …设置端口号(此处:9191),使其适合您的本地设置。服务“loclodbc”的名称必须与ODBC设置中定义的服务器名称匹配。请注意,“服务器”一词与您电脑的物理主机名无关

  • 您的SAS ODBC服务器现在已准备好运行,但is没有分配的可用数据资源。通常,您可以在SAS ODBC设置过程中的“库”选项卡中进行设置,但由于您希望“动态”指向数据源,因此我们省略此项

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

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

    因此

    为文件夹“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服务器从客户端应用程序向C:\sasdatafolder分配一个libname。我们可以通过在启动时使用DBCONINIT参数向其发送此资源分配请求来完成此操作

    我已经为此编写了一些示例代码。我的示例代码也是用基本SAS语言编写的。因为显然有比SAS通过ODBC连接到SAS更聪明的方式来访问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;
    

    神奇之处在于代码的“连接到ODBC…”部分,将libname分配给所需数据所在的文件夹。

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

    将以下内容保存在
    sas\u至\u 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”参数非常简单。

    现在有一个Python包,允许您读取.sas7bdat文件,或者如果愿意,将其转换为CSV


    您希望用什么程序/格式读取数据?您将使用什么编程语言?我使用的是Python。我没有指定程序或格式,因为我不想限制响应;如果有办法通过DLL或API读取数据,我肯定我能想出如何调用它。但我找不到任何方法来读取数据这样做时,不需要从SAS授权其他程序。编写SAS宏以转换每个SAS数据集是否可以算作自动解决方案?不完全可以。我希望能够读取遇到的任何SAS数据集,而不是在使用它们之前成批转换它们。实际上,您不需要运行SAS会话;ODBC驱动程序将自动启动一个SAS会话但是,没有简单的方法以编程方式创建ODBC配置,因此必须手动配置。这是一个问题,因为您不能只加载任意数据集。所谓任意,您可能是指“位于任何位置,具有任何名称”"...? 或者它是作为一个参数给出的?位于任何地方,有任何名称。我相信这是可以做到的。如果可以在运行时从调用应用程序将SAS数据文件的位置写入文件,则可以将SAS设置为在ODBC启动时读取此文件,并进行分配,以便通过ODBC提供数据。我会调查的。