2016-08-04 5 views
1

어레이를 사용하여 새 변수를 만들려고합니다 (예 : 올해와 주간 변경). 나는 "orders_LY"와 "orders_LW"SAS 배열을 사용하여 접미어로 새 변수 만들기

이 하나 (아래 코드에서) 작동이 비록

LW=lag1(figures{i}); 

을 생산하기 위해 배열을 사용 후 "주문"라고 말하며 가질 수 있도록 내가 명명 규칙을 유지하려면 당신은 데이터 단계에서 실시간으로 배열 변수 이름을 수정할 수 없습니다,

이 하나가 그렇게하지

figures{i}_LY=lag53(figures{i}); 


data summary_&type._&date.; 
    set summary; 


    array figures {5} tv_total_orders_&type. tv_total_bookings_&type. TV_AOV_&type. total_orders_&type. total_bookings_&type. ; 
    do i=1 to 5; 

    LW=lag1(figures{i}); 
    figures{i}_LY=lag53(figures{i}); 


    end; 
    run; 
+0

다른 배열을 만드시겠습니까? – Joe

+0

배열 참조를 지연 함수에 전달하는 데주의하십시오. 'lag1 (figures {i}) '를 코딩 할 때 래그 기능은 배열의 각 요소에 대해 하나의 대기열을 작성하지 않고 하나의 대기열만을 작성합니다. 그래서 tv_total_orders_ & type의 값은 tv_total_book_ & type 등등에 쓰여질 것입니다. 이것은 여러분이 의도하지 않은 것입니다. – Quentin

답변

1

을하지, 내가 원하는 것이 아니다. 변수 이름은 데이터 단계 컴파일이 발생할 때 알려 져야합니다.

먼저 같은 두 번째 배열을 만들 수 있습니다 :

figures_ly {5} tv_total_orders_&type._ly tv_total_bookings_&type._ly TV_AOV_&type._ly total_orders_&type._ly total_bookings_&type._ly ; 

(당신이 변수 속성 초기화를 수행해야 할 수 있습니다, 나도 몰라 데이터를

당신은 다음 두 가지 옵션을 가지고) 이것은 프로그래밍을 할 때 필요한 것을 알고 변수의 목록이 변경되지 않는 경우 가장 좋습니다.

둘째, 매크로 언어를 사용하여 이러한 LY 변수를 정의 할 수 있습니다. 변수 목록을 자주 변경해야하거나 프로그램을 실행할 때까지 (데이터 기반) 목록을 알지 못하는 경우에 더 적합합니다. 그렇다면 유용한 응답을 얻기 위해 목록을 결정하는 방법에 대한 자세한 정보를 게시해야합니다.

2

조는 올바르게 정의 할 수 없지만 별도로 필요한 구조를 만든 다음 기존 구조를 기반으로 배열을 정의 할 수 있습니다. 접미사를 추가

data fields; 
    length field $50; 
    input field $; 
    datalines; 
orders 
sold 
billed 
cost 
gp 
; 
run; 

:

우리가 접미사를 추가 할 몇 가지 변수를 만듭니다 : 다음은 그 예이다

data config; 
    length new_name $50; 
    set fields; 
    new_name = field; output; 
    new_name = cats(field,'_LW'); output; 
    new_name = cats(field,'_LY'); output; 
    dummy=1; 
run; 

열 이름으로 접미사 변수를 얻기 위해 그것을 트랜스 :

proc transpose data=config out=trans(drop=_name_); 
    id new_name; 
    var dummy; 
run; 

이제 기존 이름을 기반으로 배열을 정의 할 수 있습니다.