【问题标题】:SAS VA Merge two tables (using GUI)SAS VA 合并两个表(使用 GUI)
【发布时间】:2016-03-08 10:40:09
【问题描述】:

我正在尝试使用 SAS VA 用户界面将两个表合并为一个。但我只能选择加入(左、右、内、全)。这难道不能通过 GUI 实现吗?

【问题讨论】:

    标签: sql merge sas


    【解决方案1】:

    SAS VA Data Builder 使用 SQL 查询。 所以没有像合并这样的数据步骤。使用 Full-Join,或者如果您有一个前导表,则在该表上使用 Left-Join,将获得与使用 by 语句合并的相同结果。

    使用所有相关 ID 连接 GUI 中的两个表,或者只在代码窗格中自己编辑代码。

    编辑: 如果您想在 VA 数据生成器中附加数据:这不是在查询中完成的。您直接右键单击内存库中的基表并选择附加选项。

    【讨论】:

    • 但是如果我进行完全连接,它会说我加入的每个表中必须至少有 1 列。所以 a.id 和 b.id。但我只想要一个 id 上的“union all”。可能就是SAS在系统中调用Append
    • 你说得对,这就是所谓的Append。您无需为此进行查询。只需右键单击库中的基表并选择附加。确保您使用内存中的表。
    • 感谢您的帮助,现在它完全是其他导入问题我有..localizedMessage = "com.sas.lasr.LASRException: 错误: 无法导出格式化值。(errorCode=GENERIC_EXCEPTION, params =null)" .. 不知道这是什么意思 xD
    【解决方案2】:

    是的,数据准备在 sql 上运行,但不是必须的。理论上,你可以破解数据准备中的代码来完成你想要的。首先,通过将任何数据集拉到设计选项卡中,在数据准备中创建一个“虚拟”查询(为了简单起见,使用与其他库相同的库中的一个。您甚至可以使用您已经选择的两个中的一个),选择一两列产生结果,转到“输出”选项卡并给它你希望它最终具有的实际名称。然后单击“代码”选项卡。您将看到一些预先填充的代码。在底部,您将看到一个 proc sql 语句查询数据集并拉入您选择的列,然后是代码以删除该名称的任何现有数据集,然后是在 lasr 库中创建表的数据步骤。看起来像这样,我调用了我的输出 testtable_01...

    proc sql noprint;
    create table TEMP_LASR_VIEW_0 as 
    SELECT
        library.column_1 length=8 format=16. AS column_1,
        library.column_2 length=8 format=10. AS column_2 
    FROM
        library.table;
    quit;
    /* Drop existing table */
    %vdb_dt(LASRLIB.testtable_01);
    data LASRLIB.testtable_01 (   );
    set TEMP_LASR_VIEW_0 (  );
    run;
    

    现在预览查询的结果(只是为了确保它能够正常工作,因为它是一个简单的选择语句,所以应该这样做)。接下来,您将保存查询。这将生成您需要的最后一段代码...... registertable 宏。这将创建分配给您在开始时拥有的输出表名的 reposid 和 tableid。应该看起来像这样..

    /* Synchronize table registration */
    %registerTable(
     LIBRARY=%nrstr(/Shared Data/SAS Visual Analytics/Public/Visual Analytics Public LASR)
    , REPOSID=%str(A5UHNO19)
    , TABLEID=%str(A5UHN019.BF003CB7));  
    

    现在您有了这段代码,您可以单击“解锁以进行手动编辑”按钮(看起来像代码窗口左上方的一个小挂锁)。一旦你点击它,就没有回头路了。如果你搞砸了,你将不得不从头开始。但是现在您将能够修改代码。用您想要合并您实际想要使用的两个数据集的任何代码替换 proc sql。例如。

    DATA TEMP_LASR_VIEW_0;  
    MERGE library.TABLE_01  
          library.TABLE_02;  
    BY COLUMN_01;  
    RUN;  
    /* Drop existing table */
    %vdb_dt(LASRLIB.testtable_01);
    data LASRLIB.testtable_01 (   );
    set TEMP_LASR_VIEW_0 (  );
    run;
    /* Synchronize table registration */
    %registerTable(
     LIBRARY=%nrstr(/Shared Data/SAS Visual Analytics/Public/Visual Analytics Public LASR)
    , REPOSID=%str(A5UHNO19)
    , TABLEID=%str(A5UHN019.BF003CB7));  
    

    现在保存查询并运行它。同样,理论上这应该有效。可能需要稍微调整一下。在完美之前可能需要一些尝试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-08
      • 1970-01-01
      • 2020-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多