sas中用于压缩字符串的数组

sas中用于压缩字符串的数组,sas,sas-macro,Sas,Sas Macro,我有一个包含名称和字符串的数据,我想将所有字符串(col1、col2等)添加到一列中。 字符串的数量不是固定的,有时可能或多或少。 我可以用catx做到这一点,但不知道如何用阵列实现这一点。 下面是我的数据集。请导游 data a; input name$ col1$ col2$ col3$ col4$; DATALINES; Harry abc dcd vgd bvd peter cvc fgf ghg ghh John fgg ftg uty gfdg sheyala

我有一个包含名称和字符串的数据,我想将所有字符串(col1、col2等)添加到一列中。 字符串的数量不是固定的,有时可能或多或少。 我可以用catx做到这一点,但不知道如何用阵列实现这一点。 下面是我的数据集。请导游

data a;    

    input name$  col1$ col2$ col3$ col4$;

DATALINES;
Harry abc dcd vgd bvd
peter cvc fgf ghg ghh
John fgg ftg uty gfdg
sheyala fgf jty fhf fgr
;
run;
这是我的密码:

data test;
length result $50;
set a;
result=Compress(catx(';',of col1-col4),'0D0A'x);
run;
但是字符串的数量不是固定的

谢谢和问候,
Sanjay

您可以定义元素数量不确定的数组。这假设您的所有列都以
col
开头

data test;
length result $50;
set a;
array c[*] col:;

result = "";
do i=1 to dim(c);
    result = Compress(catx(';',result,c[i]),'0D0A'x);
end;
drop i;
run;
col:
告诉SAS您希望所有变量都以
col
开头,数组中的
[*]
告诉SAS定义元素本身的数量。使用
dim()
函数获取该数字并循环数值

编辑:

如评论中所述,以下方法也有效

在不使用阵列的情况下:

data test;
length result $50;
set a;

result = Compress(catx(';',of col:),'0D0A'x);

run;
或者,如果您仍然需要阵列:

data test;
length result $50;
set a;
array c[*] col:;

result = Compress(catx(';',of c[*]),'0D0A'x);
run;

您可以定义元素数量不确定的数组。这假设您的所有列都以
col
开头

data test;
length result $50;
set a;
array c[*] col:;

result = "";
do i=1 to dim(c);
    result = Compress(catx(';',result,c[i]),'0D0A'x);
end;
drop i;
run;
col:
告诉SAS您希望所有变量都以
col
开头,数组中的
[*]
告诉SAS定义元素本身的数量。使用
dim()
函数获取该数字并循环数值

编辑:

如评论中所述,以下方法也有效

在不使用阵列的情况下:

data test;
length result $50;
set a;

result = Compress(catx(';',of col:),'0D0A'x);

run;
或者,如果您仍然需要阵列:

data test;
length result $50;
set a;
array c[*] col:;

result = Compress(catx(';',of c[*]),'0D0A'x);
run;

数组不是绝对必要的(尽管OP提到了它)。您可以将
col:
而不是
col1-col4
放在原始代码中。或者,如果出于任何原因使用数组,似乎不需要循环,是吗?只是
catx(“;”,of c[*])
?什么是SAS中的0D0A'x?@Alph它用于压缩一个数组并不是严格必需的(尽管OP提到了它)。您可以将
col:
而不是
col1-col4
放在原始代码中。或者,如果出于任何原因使用数组,似乎不需要循环,是吗?只是c[*]的catx(“;”)?SAS中的0D0A'x是什么?@Alph它用于按回车键