Я задавал этот вопрос и в RunSubmit, поскольку сообщество SAS Q & A кажется немного рассеянным. Если это не оценено, пожалуйста, дайте мне знать.
Возможно ли на шаге данных вернуться к предыдущему / определенному наблюдению и пройти дальше через набор данных?
Чтобы добавить к вопросу в случае, если он все еще не ясно, небольшой пример:
Набор данных 'work.test':
name | number
John | 1
Jack | 2
Jane | 3
Jade | 4
Ronn | 5
Dick | 6
Sofy | 7
Sady | 8
Ruth | 9
Шаг данных:
Data _null_;
set work.test;
File ...\test.txt;
put name;
if number = 5 and counter=3 then do;
counter = counter+1;
*return to obs where number = 3* AKA *set obs pointer back to obs with nr=3*;
end;
run;
* Вопрос о части возврат в obs, где число = 1 , а не о
[и в первый раз] , который только добавляется, чтобы не создавался и бесконечный цикл. *
Дополнительная информация:
Поскольку кажется, что все еще не совсем ясно, что я хочу сделать, я добавил немного к исходному образцу набора данных и примеру.
Просто помните, что он должен быть немного общим, а не фиксированным кодом Условия могут измениться позже. Но главный вопрос просто: « можно ли вернуться к obs = X и перейти оттуда, когда вы находитесь на obs = Y и как?»
Справочная информация:
Это вписывается во всю историю создания вывода XML с использованием одной таблицы, содержащей поток XML, где некоторые элементы должны повторяться. Нет, использование карты XML невозможно из-за старой версии SAS. Нет, ОРВ также не применяется в этом случае. Кстати, это просто справочная информация, потому что замечание «Я до сих пор не знаю, что вы пытаетесь сделать» продолжает появляться;)
Список возможностей, НЕ применимых для моих нужд:
- Функция REWIND (возвращает только к первому наблюдению)
- Функция LAG (для получения предыдущего значения переменной, а не для возврата в obs)
- Использование нескольких операторов SET: это не является универсальным способом, в котором я нуждаюсь (т.е. для некоторых наборов данных потребуется 2 цикла, для других потребуется 5 циклов, таким образом, 5 вложенных операторов SET ...)
Что МОЖЕТ работать:
- Использование полного кода SCL для прохождения шага данных (отложено)
- Параметр POINT в операторе SET (текущая попытка)
- Хеш-таблицы: еще предстоит провести дополнительные исследования, так как я мало что знаю об этом или о том, как их реализовать.