连接不同数据集中的变量

时间:2016-02-13 19:58:05

标签: sas concatenation do-loops

我有多个不同列的数据集。我们假设数据集1有col1,col2,col3而数据集2只有col1和col2。

现在我想将所有这些列与“,”(逗号)组合在一起。我创建了一个宏,它将所有列(col1,col2,col3)与逗号组合在一起。但是,如果另一个数据集中的列数较少,则会出现我不想要的额外逗号。

例如,如果我编写代码total = catx(col1,col2,col3),结果将是 1,2,

我想要的只是我的结果是1,2而没有额外的逗号

请建议我如何使用do循环执行此操作。

代码

%macro xyz (data, data_1);
   proc sort data =a.&data.;
   by Type;
   where Type ne " ";
   run;

proc transpose data=a.&data. out=a.&data1.;
var string;
run;

data a.&data1.;
set a.&data1.;
total=catx(",",col1,col2,col3);
run; 
%mend;
%xyz(gold,gold1);
%xyz(silver,silver1);

所以如果gol1中有三个变量但是在silver1中有2个连接总数将在总变量中给我一个额外的逗号,我不需要。我知道因为我给了一个额外的列(col3)在catx语句中,这样它会给我额外的逗号,但正如我所说的不同数据集中不同数量的变量

2 个答案:

答案 0 :(得分:0)

如果你这样做会发生什么:

data a.&data1.;
set a.&data1.;
array col(3) col1-col3;
total=catx(",", of col(*));
run; 

答案取决于您如何列出变量。如果您使用OF它会考虑缺失的值,如果您使用显式列表方法,它就不会。

答案 1 :(得分:0)

根据您的示例,我将使用名称前缀列表。

total=catx(',',OF COL:);

SAS Variable Lists