2016-12-14 3 views
1

데이터가 SAS에서 다음과 같습니다.SAS에서 날짜로 여러 열 합계

Date Type_1 Type_2 
4/8/2015 21654.72 . 
4/9/2015 34490.13 . 
4/9/2015 32429  . 
4/9/2015 .  24438.76 
4/9/2015 .  54043.18 
4/9/2015 .  58969.06 
4/9/2015 .  57721.01 
4/9/2015 .  46313.08 
4/10/2015 .  49974.06 
4/10/2015 .  52403.41 
4/10/2015 25260.07 . 
4/10/2015 27891.98 . 
4/11/2015 .  28130.06 
4/11/2015 24886.15 . 
4/11/2015 10407.6 . 
4/11/2015 49422.71 . 
4/11/2015 15242.28 . 
4/11/2015 .  25295.52 
4/11/2015 .  17522.67 
4/13/2015 29798.99 . 
4/13/2015 10445.17 . 
4/13/2015 23678.87 . 
4/13/2015 .  35470.87 
4/13/2015 .  33941.01 
4/13/2015 .  30206.06 
4/13/2015 .  26591.98 

SAS 데이터 단계를 사용하여 type_1과 type_2의 합계를 계산하고 두 열을 날짜별로 통합하려고합니다.

data work.data; 
    set data_consolidated; 
    by date; 

    if first.date then total_type_1=0 and total_type_2=0; 
    total_type_1 + type_1; 
    total_type_2 + type_2; 
    if last.date then output; 
    drop type_1; 
    drop_type_2; 
run; 

이 코드는 날짜를 consilidates, 대신 날짜 컬럼에있는 모든 값을 합산, 그것은 이전의 모든 값을 현재의 값을 추가하고있다 :

것은 나는 다음과 같은 코드를 시도했습니다 누적 방식으로

date  type_1  type_2 
4/8/2015 21654.72 . 
4/9/2015 66919.13 128472.85 
4/10/2015 53152.05 102377.47 
4/11/2015 99958.74 70948.25 

어떤 조언이나 도움이 크게 감사합니다 :

그냥 명확하게하기 위해, 아래 나는 데이터의 모양을 얻기 위해 노력하고있어의 예입니다.

답변

2

이 시도 :

proc sql; 
    select distinct date, sum(type_1) as type_1, sum(type_2) as type_2 from data_consolidated group by date; 
quit; 
+0

완벽하게 작동합니다. 내 생각을 데이터 단계에 설정하고 proc SQL을 조사하지 않은 것 같습니다. 고마워요 @ 쉔린 첸! – Jarom

1

나는 당신의 문제가이 선하다고 생각합니다.

if first.date then total_type_1=0 and total_type_2=0; 

이것은 total_type_1에 설정 될 것 중 1 (true) 또는 입문 오른쪽의 대수식의 평가에 기초하여 0 (거짓). total_type_2의 값은 변경되지 않습니다.

if first.date then total_type_1=0; 
if first.date then total_type_2=0; 

또는

if first.date then do; 
    total_type_1=0; 
    total_type_2=0; 
end; 

다우 루프를 사용하여이 데이터 단계에서 것은 이런 종류의 작업을 수행 할 수있는 좋은 방법입니다

은 아마 당신은 할 의미했다.

data want; 
    do until(last.date); 
    set data_consolidated; 
    by date; 
    total_type_1 = sum(total_type_1,type_1,0); 
    total_type_2 = sum(total_type_2,type_2,0); 
    end; 
    drop type_1 type_2 ; 
run; 
+0

그게 문제가 된 것 같았습니다. 지금은 분명하지만, 제대로 실행하려면 라인을 2 개로 나누어야한다는 것을 깨닫지 못했습니다. – Jarom