2013-10-03 3 views
0

У меня есть 2 таблицы, и я хочу выводить их путем сопоставления с MODEL и AGE T1 с MODEL и AGE_BT T2. Я использовал код и получаю пустой вывод. вывод должен выглядеть как выходная таблица ниже. ,Поиск в таблице в sas

Table:1 

MODEL AGE1 AGE2 AGE3 AGE4 
SLOT1 0-10 10-20 20-35 35p 
SLOT1 0-10 10-20 20-35 35p 
SLOT1 0-10 10-20 20-35 35p 
SLOT2 0-10 10-20 20-35 35p 
SLOT2 0-10 10-20 20-35 35p 
SLOT3 0-10 10-20 20-35 35p 

Table:2 

    MODEL AGE_BT   FHA 
    SLOT1 0-10   600 
    SLOT1 10-20   435 
    SLOT1 20-35   210 
    SLOT1  35P   10 
    SLOT2 0-10   391 
    SLOT2 10-20   385 
    SLOT2 20-35   246 
    SLOT2  35P   0 
    SLOT3 0-10   391 
    SLOT3 10-20   385 
    SLOT3 20-35   246 
    SLOT3  35P   0 


OUTPUT TABLE 

MODEL AGE1 AGE2 AGE3 AGE4 SEG_AGE1 SEG_AGE2 SEG_AGE3 SEG_AGE4  
SLOT1 0-10 10-20 20-35 35p  600  435  210  10 
SLOT1 0-10 10-20 20-35 35p  600  435  210  10 
SLOT1 0-10 10-20 20-35 35p  600  435  210  10 
SLOT1 0-10 10-20 20-35 35p  600  435  210  10 
SLOT1 0-10 10-20 20-35 35p  600  435  210  10 
SLOT1 0-10 10-20 20-35 35p  600  435  210  10 
SLOT2 0-10 10-20 20-35 35p  391  385  246  0 
SLOT2 0-10 10-20 20-35 35p  391  385  246  0 
SLOT2 0-10 10-20 20-35 35p  391  385  246  0 
SLOT2 0-10 10-20 20-35 35p  391  385  246  0 


%macro age(ageap); 
%let n=%sysfunc(countw(&ageap)); 

proc sql; 
create table segment_test2_ as 
select distinct T1.* 
%do i=1 %to &n; 
%let ap = %scan(&ageap,&i); 
,T2.FHA as SEG_&ap 
%end; 
from  segment_test1 T1 
left join ANNUAL_FH  T2 
on T1.Model=T2.Model and T1.&ap=T2.AGE_BT; 
quit; 
%mend; 

%age(AGE1 AGE2 AGE3 AGE4); 
+0

Я сомневаюсь, что вы получаете «чистую» продукцию. Что происходит в журнале? Ошибки? Или он работает синтаксически и просто возвращает нулевые строки? – Joe

+0

Привет, Джо, есть некоторая ошибка в данных. Теперь я обновил и теперь работаю. Спасибо .. – user2784588

+0

Почему в таблице результатов есть 7 одинаковых строк для slot1? Ни одна из ваших входных таблиц не имеет 7 слотов1. Вы пытаетесь выполнить запрос: 1 левое соединение 2, поэтому я думаю, вам нужно 4 слота 1 ряд. – DomPazz

ответ

3

С MPRINT, вы должны увидеть этот код:

74 options mprint; 
75 %age(AGE1 AGE2 AGE3 AGE4); 
MPRINT(AGE): proc sql; 
MPRINT(AGE): create table segment_test2_ as select distinct T1.* ,T2.FHA as SEG_AGE1 ,T2.FHA as SEG_AGE2 ,T2.FHA as SEG_AGE3 
,T2.FHA as SEG_AGE4 from segment_test1 T1 
left join ANNUAL_FH T2 on T1.Model=T2.Model and T1.AGE4=T2.AGE_BT; 

Уведомление T1.AGE4=T2.AGE_BT в конце. На основе вашего образца, AGE_BT должен быть выравнивание по левому краю и в нижнем регистре потенциально равной AGE4 так:

T1.AGE4=lowcase(left(T2.AGE_BT)) 
+0

Привет, Vasja, я получил результат, как я хотел, все еще попробую, спасибо – user2784588

+0

Я пробовал с этим и теперь его работу. ОПЦИИ SYMBOLGEN MPRINT MLOGIC; % macro AG; % LET AA = 1; % do i = 0% to 3; % пусть Aps =% EVAL (& АА + &i); ргос SQL; создать таблицу SEGMENT_ & Aps, как выбрать отчетливую T1 * , T2.Average_FH/12, как Segment_ & Aps из сегмента T1 влево присоединиться к FINAL.ANNUAL_FH_AVERAGE T2. на T1.Model = T2.Model и T1.age & Aps = T2.Age_bracket; бросить курить; % конец; % ИСПРАВЬТЕ AG; % AG – user2784588

0
OPTIONS SYMBOLGEN MPRINT MLOGIC; 
%macro AG; 

%LET AA=1; 

%do i=0 %to 3; 

%let apS = %EVAL(&AA+&i); 

proc sql; 
create table SEGMENT_&apS as 
select distinct T1.* 


,T2.Average_FH/12 as Segment_&aps 

from  segment T1 
left join FINAL.ANNUAL_FH_AVERAGE T2 
on T1.Model=T2.Model and T1.age&aps=T2.Age_bracket ; 
quit; 
%end; 

%mend AG; 
%AG 
Смежные вопросы