Hi all, I would like to concatenate all numeric columns with the CATX function, without specifying all columns names. For example: data work.my_ds;
input char1 $ char2 $ num1 num2;
datalines;
A Z 111 222
B Y 123 456
C X 987 654
;
run; My first thought was to use CATX("/", of _numeric_). However, this doesn't work because of the data type of the new variable concat_num /* Option 1: Doesn't work */
data work.option1;
set work.my_ds;
concat_num = catx("/", of _numeric_);
run; The second option is to define the data type of concat_num. This works, but I don't like the solution because you have to define directly the length of the new variable. The defined length might be too short or too long. /* Option 2: Works, but you need to define the Length of concat_num variable */
data work.option2;
set work.my_ds;
length concat_num $20;
concat_num = catx("/", of _numeric_);
run; The third option is to use the Dictionary tables to create a macro variable of all numeric columns. This option works fine, but might be hard to understand for someone who isn't very experienced in SAS. /* Option 3: Works, but not very elegant. Hard to understand for less experienced programmer */
proc sql;
select name into :numeric_vars
separated by ","
from dictionary.columns
where libname="WORK"
and memname="MY_DS"
and type="num";
quit;
data work.option3;
set work.my_ds;
concat_num = catx("/", &numeric_vars.);
run; Does anyone have a more elegant and easy-to-understand solution? Best regards, Pim
... View more