2014-07-11 2 views
1

매크로 변수를 참조 할 때 구문에 문제가 있습니다.SAS PROC SQL 참조 매크로 목록

나는 ID 번호의 일부와 IDNUM에 의해 관련된 양적 변수 XXX와 데이터 집합을 가지고 :

data IDnumlist; 
    input IDnum; 
cards; 
123 
456 
789 
; 
run; 

data info; 
    input IDnum xxx; 
cards; 
123 2 
123 5 
456 3 
789 1 
789 4 
555 9 
; 
run; 

나는 그 때문에, 정보 데이터 세트에서 데이터를 요약 할 수 있지만 IDNUM = 555에 대한 내 하위 집합에 없습니다. 그래서 내 데이터 세트는 다음과 같이 보일 것이다 : 내가 잘못

proc sql noprint; 
    select count(*) 
     into :NObs 
    from IDnumlist; 
    select IDnum 
     into :IDnum1-:IDnum%left(&NObs) 
    from IDnumlist; 
quit; 

proc sql; 
    create table want as 
    select IDnum, 
      count(xxx) as xxx_count, 
      sum(xxx) as xxx_sum 
    from info 
    where IDnum in (&IDnum1-IDnum%left(&NObs)) 
    group by 1; 
run; 

를하고있는 중이 야 무엇 :

여기
IDnum xxx_count xxx_sum 
123 2   7 
456 1   3 
789 2   5 

내 시도가 지금까지 무엇입니까?

답변

2

왜 매크로 변수를 사용하고 있습니까? 이것은 조인이 수행하는 것, 서브 쿼리 또는이를 수행하는 다른 많은 더 좋은 방법을 아는 사람입니다.

proc sql; 
create table want as 
    select info.idnum, count(xxx) as xxx_count, sum(xxx) as xxx_sum 
    from info inner join idnumlist 
    on info.idnum=idnumlist.idnum 
    group by info.idnum; 
quit; 

위 코드의 특정 문제는 데이터 단계 목록처럼 '매크로 변수 목록'을 사용할 수 없다는 것입니다. 이론 상으로는 개별적으로 나열 할 수 있지만 선택을 다르게하는 것이 좋습니다.

proc sql noprint; 
    select IDnum 
     into :IDnumlist separated by ',' 
    from IDnumlist; 
quit; 

그런 다음 모든 값은 & idnumlist입니다. in 연산자와 직접 사용할 수 있습니다.

where idnum in (&idnumlist.) 
+0

Ok. 응, 내면의 조인이 더 의미가 있다고 생각해. 왜 내가 매크로 목록이 더 좋을지 생각하고 있는지 잘 모르겠다. 감사. – pyll