2012-04-23 2 views
1

Я работаю на ПК SAS 9.1 и работаю на двух удаленных серверах, поэтому я пытаюсь настроить свои параметры и форматы и т. Д .; на локальном компьютере, прежде чем загружать их на каждый удаленный сервер.SAS Многослойный формат не работает при загрузке/загрузке

Я хочу применить многослойный формат к сводке proc. У меня есть формат, частично работающий, но что-то не получается, когда я загружаю (или загружаю) формат.

В этом примере ниже я создаю формат MultiLabel на удаленном сеансе. Затем я создаю простой набор данных и применяю формат.

Затем я произведу сводку Proc о данных, которые приведут таблицу с полем таблицы таблицы, суммированную сначала с форматированием модели, затем сделайте, а затем введите, в результате получится таблица из 8 строк.

Затем я загружаю формат на локальный сеанс и выполняю то же создание и сводку данных. Когда это выполняется, только первая метка (Модель) формата используется в сводке Proc, это означает, что мой набор данных имеет только 5 строк.

RSubmit RemoteServer; 
    Proc Format; 
     Value $Brand (NotSorted MultiLabel) 
     /* Model */ 
     'A' = 'Focus' 
     'B' = 'Astra' 
     'C' = 'Fiesta' 
     'D' = 'Corsa' 
     'E' = 'Fusion' 

     /* Make */ 
     'A' = 'Ford' 
     'B' = 'Vauxhall' 
     'C' = 'Ford' 
     'D' = 'Vauxhall' 
     'E' = 'Ford' 

     /* Type */ 
     'A' = 'Automobile' 
     'B' = 'Automobile' 
     'C' = 'Automobile' 
     'D' = 'Automobile' 
     'E' = 'Automobile'; 
    Run; 
    EndRSubmit; 

    RSubmit RemoteServer; 
    Proc Download InCat = Work.Formats 
        OutCat = Work.Formats; 
    Run; 
    EndRSubmit; 

    RSubmit RemoteServer; 
    Data Source; 
     Do i = 1 To 5; 
     If  i = 1 Then Brand = 'A'; 
     Else If i = 2 Then Brand = 'B'; 
     Else If i = 3 Then Brand = 'C'; 
     Else If i = 4 Then Brand = 'D'; 
     Else If i = 5 Then Brand = 'E'; 
     Volume = 1; 
     Output; 
     End; 
     Format Brand $Brand.; 
    Run; 
    EndRSubmit; 

    RSubmit RemoteServer; 
    Proc Summary Data = Source NoPrint CompleteTypes Missing NWay; 
     Class Brand/MLF PreLoadFmt Order = Data; 
     Var Volume; 
     Output Out = Summary (Drop = _:) 
      N() = Volume; 
    Run; 
    EndRSubmit; 



    Data Source; 
    Do i = 1 To 5; 
     If  i = 1 Then Brand = 'A'; 
     Else If i = 2 Then Brand = 'B'; 
     Else If i = 3 Then Brand = 'C'; 
     Else If i = 4 Then Brand = 'D'; 
     Else If i = 5 Then Brand = 'E'; 
     Volume = 1; 
     Output; 
    End; 
    Format Brand $Brand.; 
    Run; 

    Proc Summary Data = Source NoPrint CompleteTypes Missing NWay; 
    Class Brand/MLF PreLoadFmt Order = Data; 
    Var Volume; 
    Output Out = Summary (Drop = _:) 
      N() = Volume; 
    Run; 

Когда я смотрю на формат на каждом сервере, он отображается как правильно созданный с несколькими ярлыками, однако он их не применяет.

Я пробовал смотреть на различные сайты, SUGI и т. Д .; но не может найти кого-либо еще, кто испытывает эту проблему.

Похоже, что что-то не так с чтением переданного формата, потому что оно выглядит правильно и когда формат создается на любом сервере, таблица будет работать на этом сервере.

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

Большое спасибо.

+0

Почему вы так сильно отсоединяете/подключаетесь к удаленному серверу? Я предполагаю, что вы имеете в виду REMOTESERVER1 и REMOTESERVER2? Вы уверены, что PROC FORMAT верен? Я понимаю, что он использует параметр MULTILABLE (с которым я не знаком), но есть только 1 оператор VALUE ... это правильно? –

+0

Да, формат правильный, если он создан на сервере, а затем запускает сводку, это работает, только когда формат передается с одного сервера на другой, который он перестает работать. – Satkin2

ответ

1

Я думаю, что проблема заключается в том, что после создания формата (на REMOTESERVER1) вы снова отсоединяетесь к ЛОКАЛЬНОЙ сессии перед подключением к REMOTESERVER2. FORMAT необходимо перенести в ЛОКАЛЬНУЮ сессию, а затем переместить в REMOTESERVER2.

Это то, что сработало для меня (просто перемещая каталог формата между REMOTESERVER1, LOCAL и REMOTESERVER2), по крайней мере, журнал показал, что он был успешным.

filename RLink 'myScript' ; 
options comamid=tcp remote=REMOTESERVER1; 
signon REMOTESERVER1 ; 
rsubmit; 

proc format; 
    value $test 
    'TEST'=1 ; 
run; 

Proc Download 
    InCat = Work.Formats 
    OutCat = Work.Formats; 
Run; 

endrsubmit ; 

/* Now back in LOCAL */ 

filename RLink 'myScript2' ; 
options comamid = tcp remote = REMOTESERVER2 ; 
signon REMOTESERVER2 ; 
rsubmit ; 

Proc Upload 
    InCat = Work.Formats 
    OutCat = Work.Formats; 
Run; 

endrsubmit ; 
+0

Исправить. Когда набор данных, который имеет поля с использованием пользовательских форматов, перемещается на другую платформу, форматы должны идти с ним. –