all_s
недостаточно велик, чтобы вместить конкатенацию, если общая длина значений var1-var3
в группе превышает $50
.Такой сценарий кажется вероятным, когда var1-var3
равен $40
.
Я рекомендую использовать функцию length
для указания переменных длин.format
создаст переменную определенной длины в качестве побочного эффекта.
catx
удаляет пустые аргументы из конкатенации, поэтому, если вам нужны пробелы в конкатенации, когда у вас есть пустой single_varN
, вы выиграли 'не может использовать catx
Требование, которое определяет конкатенацию, при которой непустые значения отбрасываются, а пустые значения - это один пустой пробел, скорее всего, придется прибегнуть к подходу старой школы trim(left(…
Пример кода
data have;
length group 8 v1-v3 $5;
input group (v1-v3) (&);
datalines;
1 111 222 333
1 . 444 555
1 . . 666
1 . . .
1 777 888 999
2 . . .
2 . b c
2 x . z
run;
data want(keep=group vlist: all_list);
length group 8 vlist1-vlist3 $40 all_list $50;
length comma1-comma3 comma $2;
do until (last.group);
set have;
by group;
vlist1 = trim(vlist1)||trim(comma1)||trim(left(v1));
vlist2 = trim(vlist2)||trim(comma2)||trim(left(v2));
vlist3 = trim(vlist3)||trim(comma3)||trim(left(v3));
comma1 = ifc(missing(v1), ' ,', ',');
comma2 = ifc(missing(v2), ' ,', ',');
comma3 = ifc(missing(v3), ' ,', ',');
all_list =
trim(all_list)
|| trim(comma)
|| trim(left(v1))
|| ','
|| trim(left(v2))
|| ','
|| trim(left(v3))
;
comma = ifc(missing(v3),' ,',',');
end;
run;
Ссылка
SAS имеет операторы и несколько функций для объединения строк
||
объединить cat
объединить catt
объединить, обрезать (удалить конечные пробелы) каждого аргумента cats
объединить, удалить (удалить начальные и конечные пробелы) каждого аргумента catx
объединить, удалить каждый аргумент и разделить catq
объединить с аргументами-разделителями и заключить в кавычки аргументы, содержащие разделитель
Из Документация SAS 9.2
Сравнения
Результаты функций CAT, CATS, CATT и CATXобычно эквивалентны результатам, которые получены определенными комбинациями оператора конкатенации (||) и функций TRIM и LEFT.Однако длина по умолчанию для функций CAT, CATS, CATT и CATX отличается от длины, получаемой при использовании оператора конкатенации.Для получения дополнительной информации см. Длина возвращаемой переменной .
Примечание: В случае переменных, у которых отсутствуют значения, конкатенация дает разные результаты.См. Объединение строк с отсутствующими значениями .