Sas 连接不同数据集中的变量

Sas 连接不同数据集中的变量,sas,concatenation,do-loops,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 (dat

我有多个不同列的数据集。让我们假设数据集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语句中,y将给我额外的逗号,但正如我所说,不同的数据集不同的变量数

如果这样做会发生什么:

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

答案取决于如何列出变量。如果使用的
,它会解释缺少的值,如果使用显式列表方法,则不会

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

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

否,CATX会导致缺少值甚至变量,尽管您会在日志中看到一条消息。@Reeza,那么,如果变量少于CATX语句中提到的列,如何删除多余的逗号。我基本上想用宏来处理100个数据集。每个数据集都有不同数量的变量,如果变量数量较少,我不希望在最终连接的变量中使用额外的逗号。CATX不会在测试中包含这些变量。如果有问题,请发布代码。@Reeza..codde已添加。谢谢动态计算变量的数量。我会发布代码的。行,行,行!!非常感谢你@reeza。非常感谢。:)确保额外的变量不会导致进一步的问题。是的,我会确保这一点