2013-09-06 3 views
1

Мне нужна колонка в целом как наблюдение.Общее количество столбцов как наблюдение в наборе данных в SAS

Input Dataset   Output Dataset 
-------------   -------------- 
data input;    Name Mark 
input name$ mark;  a  10 
datalines;    b  20 
a 10     c  30 
b 20     Total 60 
c 30 
; 
run; 

Приведенный ниже код, который я написал, работает нормально.

data output; 
    set input end=eof; 
    tot + mark; 
    if eof then 
    do; 
    output; 
    name = 'Total'; 
    mark = tot; 
    output; 
    end; 
    else output; 
run; 

Просьба предложить, если есть лучший способ сделать это.

ответ

1

Ваш код в порядке, однако проблема может быть связана с производительностью. Если таблица ввода огромна, вы в конечном итоге переписываете полную таблицу.

Я хотел бы предложить что-то вроде этого:

proc sql; 
delete from input where name = 'Total'; 
create table total as 
select 'Total' as name length=8, sum(mark) as mark 
from input 
; 
quit; 

proc append base=input data=total; 
run; 

Здесь вы читаете полную таблицу, но писать только одну строку в существующей таблице.

+0

У меня есть аналогичная проблема - как можно применить это решение для выполнения нескольких столбцов в одной таблице, то есть если есть 2-й столбец «mark 2», а также столбец «mark»? – user2568648

2

PROC REPORT - хорошее решение для этого. Это суммирует весь отчет - другие варианты дают вам возможность суммировать в группах.

proc report out=outds data=input nowd; 
columns name mark; 
define name/group; 
define mark/analysis sum; 
compute after; 
    name = "Total"; 
    line "Total" mark.sum; 
endcomp; 
run; 
Смежные вопросы