Заменить?в столбце присвоить значение в SAS SQL-запрос? - PullRequest
0 голосов
/ 24 августа 2018

У меня есть данные, в которых есть столбец A со следующими данными

Column A
--------
1
2
?
2

Я использовал запрос:

proc sql;
select 
if A= '?' then A=., count(*) as N_obs 
from freq_sex_Partner
group by Number_of_sexual_partners;
quit;

Это не работает. Подскажите пожалуйста как можно заменить? к какому-либо стандартному значению?

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Столбец A содержит "?", поэтому он является символьным. Код @reeza должен быть then "" или ifc(a='?',"", a). Кроме того, если вы не выберете переменную группировки, контекст N_obs будет утерян.

Предлагайте

data have;
input a $ nsp ;
datalines;
1 2
2 3
? 7
2 7
run;

proc sql;
  select
    nsp
  , case when a='?' then '' else a end as a
  , count(*) as nsp_count
  from have
  group by nsp
  ;
quit;

В запросе также регистрируется сообщение NOTE: The query requires remerging summary statistics back with the original data., поскольку Proc SQL выполняет автоматическое повторное объединение групповых агрегатов с отдельными строками в группе.

0 голосов
/ 24 августа 2018

В SQL это оператор CASE, а не IF / THEN.

proc sql;
select 
case when a='?' then . 
else a end as a, count(*) as N_obs 
from freq_sex_Partner
group by Number_of_sexual_partners;
quit;

Или вы также можете использовать функцию IFC ().

proc sql;
select 
ifc(a='?', ., a) as a, count(*) as N_obs 
from freq_sex_Partner
group by Number_of_sexual_partners;
quit;
...