Итак, я создал макрос, который отлично работает. Внутри макроса я установил, где начнется наблюдение, а затем сколько наблюдений он прочитает.Упрощение определения макроса
Но, на мой Proc вызов печати, я не могу просто сделать:
(firstobs=&start obs=&obs)
Потому что, хотя firstobs будет правильно начать, где я хочу, набл не сотрудничает, как это должно быть большее число чем firstobs. Например,
%testmacro(start=5, obs=3)
не работает, потому что он читает в первых 3 наблюдениях, но при попытке начать с наблюдения 5. То, что я хочу макрос, чтобы сделать это, начните с наблюдения 5, а затем читать следующий 3. Так что я сделал вот так:
(firstobs=&start obs=%eval((&obs-1)+&start))
Это прекрасно работает, когда я его использую. Но мне просто интересно, есть ли более простой способ сделать это, вместо того, чтобы использовать весь вызов% eval .... Есть один простой вызов, что-то вроде numberofobservations = ...?
Согласитесь, это полезная гибкость, поэтому пользователь может добавить WHERE = или RENAME = и т. Д. Другой вариант - иметь параметр DATA и разрешать пользователю указывать в нем любые параметры. Поэтому вызывается так: '% testmacro (data = sashelp.class (firstobs = 3 obs = 7))'. Для меня это наиболее похоже на то, как пользователи используются для передачи наборов данных на шаги DATA или PROC. – Quentin
@Quentin Yup, это определенно отличный подход. –
Хм, вы могли бы подумать, что есть набор данных, который прост. Подход, о котором вы говорили, замечательно, я попробую. – coderX