SAS VA合并两个表(使用GUI)

时间:2016-03-08 10:40:09

标签: sql merge sas

我尝试使用SAS VA用户界面将两个表合并为一个。但我只能选择加入(左,右,内,全)。这是不可能通过GUI吗?

enter image description here

2 个答案:

答案 0 :(得分:0)

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

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

编辑: 如果要在VA数据生成器中追加数据:在查询中不会这样做。您可以直接右键单击内存库中的基表,然后选择追加选项。

答案 1 :(得分:0)

是的,数据准备在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;

现在预览查询的结果(只是为了确保它可以工作,它应该是因为它是一个简单的select语句)。接下来,您将保存查询。这将生成您需要的最后一段代码...可注册的宏。这将创建分配给您在开始时拥有它的输出表名的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));  

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