2017-01-30 1 views
0

У меня есть переменная с именем CLIENT_ID. Он используется для прокрутки пучка кода. Проблема заключается в том, что макрос ищет конкретный список клиентов, например:SAS - необходимо остановить код, если столбец имеет значение не в списке

%stuff(CLIENTX) 
%stuff(CLIENTA) 

и так далее. Поэтому, если в данных появляется новый клиент (скажем CLIENTY), этот клиент не входит в выход.

Я хотел бы также:

  1. имеет проверку коды против списка существующих клиентов и остановить, если новый клиент найден, выводит имя этого клиента, поэтому можно обновить макрос вручную
  2. имеют проверку коды для новых клиентов, а затем автоматически добавлять их в список макросов

Я знаю, как сравнить, чтобы найти новый идентификатор клиента, это просто остановка коды или обновления кода, если есть новый клиента, с которым я борюсь. Возможно, вторая невозможна? Но я надеюсь, что есть хоть какой-то способ решить эту проблему.

Я полностью признаю, что не являюсь экспертом в области макросов.

+0

У меня проблемы с визуализацией программы. Можете ли вы опубликовать небольшой пример того, что он делает, используя несколько точек данных? –

+0

У нас есть несколько вопросов с похожим характером, поиск «управляемых данными программ SAS». – Joe

+0

@StuSztukowski - Я думаю, что Джо будет работать. Но я всегда готов к большим предложениям. В основном есть основной набор данных, в котором есть каждый клиент со всеми своими учетными записями (может быть миллионы) и кучей другой информации. Сегодня макрос использует клиент для прокрутки и вытягивания некоторых из этих полей, а затем объединяет все данные. Основной набор данных настолько велик, поэтому мы делаем это. Но мы получаем новых клиентов без уведомления, и поэтому наши жестко закодированные макросы пропускают их. Я не совсем уверен, как получить примеры здесь. – Bliss

ответ

0

Что вы хотите сделать, это вызвать ваш макрос из ваших данных, а не из написанного кода.

Таким образом, вместо

%yourMacro(clientX) 
%yourMacro(clientY) 

Вы делаете:

proc sql; 
    select distinct cats('%yourMacro(',clientID,')') 
    into :macro_call_list separated by ' ' 
    from your_Data 
    ; 
quit; 

&macro_call_list.; 

Вы либо прямой your_data к основному набору данных, если это то, что у вас есть, или список действительных клиентов, если у вас есть что сохраняются в отдельном файле (например, на пешеходном переходе клиента или что-то подобное). Какими бы ни были самые современные данные. Добавление distinct к запросу гарантирует вам только один звонок за clientID. Затем &macro_call_list содержит все эти %yourMacro(clientX) и т. Д. Вызовы, и просто поместить эту ссылку в открытый код вызывает ее.

+0

Я протестировал его в небольшом списке, и он сработал. Сейчас я тестирую его на весь основной файл, что составляет почти миллиард записей. Он работает, но я думаю, что это сработает. Я предпочел бы иметь более длительное время работы, чем вручную, обновляя все время. Благодаря! – Bliss