2013-08-19 3 views
1

say У меня есть таблица SAS tbl, которая имеет столбец col. Эта колонка col имеет разные значения: {"a","s","d","f",...}, но один из них больше, чем другой (скажем "d"). Как я могу сделать выбрать только это значениеКак добиться этого выбора в SAS

Было бы что-то вроде

data tbl; 
    set tbl; 
    where col eq "the most present element of col in this case d"; 
run; 

ответ

1

Я бы использовал PROC SQL для этого.

Вот пример, который получает «d» в макропеременной, а затем фильтрует исходный набор данных, как указано в вашем вопросе.

Это будет работать, даже если есть многопользовательская связь для наиболее частых наблюдений.

data tbl; 
    input col: $1.; 
    datalines; 
    a 
    a 
    b 
    b 
    b 
    b 
    c 
    c 
    c 
    c 
    d 
    d 
    d 
;run; 

proc sql noprint; 
    create table tbl_freq as 
    select col, count(*) as freq 
    from tbl 
    group by col;  

    select quote(col) into: mode_values separated by ', ' 
    from tbl_freq 
    where freq = (select max(freq) from tbl_freq); 
quit; 

%put mode_values = &mode_values.; 

data tbl_filtered; 
    set tbl; 
    where col in (&mode_values.); 
run; 

Обратите внимание на использование QUOTE(), которая необходима, чтобы обернуть значения Col в кавычки (пропустить это, если столбец является числовым переменным).

3

Один из многих способов для достижения этой цели ...

data test; 
n+1; 
input col $; 
datalines; 
a 
b 
c 
d 
d 
d 
d 
e 
f 
g 
d 
d 
a 
b 
d 
d 
; 
run; 

proc freq data=test order=freq; *order=freq automatically puts the most frequent on top; 
tables col/out=test_count; 
run; 

data want; 
set test; 
if _n_ = 1 then set test_count(keep=col rename=col=col_keep); 
if col = col_keep; 
run; 

Чтобы поместить это в макропеременной (см. комментарии):

data _null_; 
set test_count; 
call symput("mvar",col); *put it to a macro variable; 
stop;     *only want the first row; 
run; 
+0

Вы можете сохранить сортировку, добавив ORDER = FREQ в инструкцию proc freq. – mvherweg

+0

А, вот какой вариант. В слишком большой спешке, чтобы посмотреть, спасибо! – Joe

+0

Thnaks, но я предпочел бы получить «d» в макропеременной, как я могу это сделать? – statquant

Смежные вопросы