У меня есть таблица, которая выглядит примерно так (с большим количеством записей и большим количеством заметок):
+------+---------------+------+---------------+------+---------------+------+
|id |note_1 |len_1 |note_2 |len_2 |note_3 |len_3 |
+------+---------------+------+---------------+------+---------------+------+
|10001 |"abcde" |5 |"abc" |3 |"abcdefg" |7 |
|10002 |"defghijk" |8 |"ghuio" |5 |"yuio" |4 |
|10003 |"abc" |3 |"defg" |4 |"qw" |2 |
+------+---------------+------+---------------+------+---------------+------+
и я хотел бы создать цикл do в шаге SAS data
, который объединяет все ноты до достижения определенной длины (в данном примере, длины 10). Вот идеальный столбец, который будет создан для этого примера с максимальным значением 10:
+------+--------------+
|id |concat_notes |
+------+--------------+
|10001 |"abcdeabcab" |
|10002 |"defghijkgh" |
|10003 |"abcdefgqw" |
+------+--------------+
Вот код, который я пытаюсь создать:
data length;
set notes;
concats = "";
do i=1 to 3;
if (vvaluex(cats("len_",i)) > 10) then concat_notes= concats;
else concats = cats(concats,vvaluex(cats("note_",i)));
end;
run;
Примечание. На самом деле все заметки очень длинные, и моя максимальная длина равна 32767. Я не могу объединить их все и использовать substrn
, чтобы взять первые 32 767 из-за недостатка места.