SAS - обратный порядок значений переменной на основе другого значения переменной в таблице - PullRequest
0 голосов
/ 11 октября 2018

Подводя итог, я работаю над разбором предложений документов в отдельные предложения.Мне это нужно для большего дела.

У меня есть таблица «Позиция», в которой указаны идентификатор документа (ID) и номер предложения в этом документе (NUM).У меня также есть столбец для отображения проанализированного предложения (SENTENCE).

Таким образом, пример таблицы будет:

ID NUM SENTENCE
1   3    Hello
1   2    How are you
1   1    Fine
2   2    Thank you
2   1    You're Welcome
3   1    Nice Weather

Что это означает, что в документе 1 были определены три предложения,два в документе 2 и т. д.

Проблема в том, что (ID, NUM) = (1,3) или «Hello» относится к третьему предложению в документе 1, а (ID, NUM) =(1, 1) или «Fine», относится к первому предложению в документе 1, и таким же образом шаблон действует и для всех других документов.

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

По сути, я хотел бы, чтобы моя выходная таблица выглядела следующим образом:

ID NUM SENTENCE
1   1    Hello
1   2    How are you
1   3    Fine
2   1    Thank you
2   2    You're Welcome
3   1    Nice Weather

Я был бы очень признателен за любую помощь, как это сделать.

РЕДАКТИРОВАТЬ:

Я хотел бы изменить вывод, чтобы отразить взаимозаменяемость предложений в выходной таблице.Порядок предложений останется прежним.Это так, что «Hello» будет представлено как предложение 1, а не как 3.

Поэтому, следовательно, я бы хотел, чтобы только переменная «NUM» обменивалась внутри каждого значения переменной «ID» в выходной таблице.

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

примерно так должно работать в Proc SQL

proc sql;
create table want as 
select id, (max(num)+1)-num as num, sentence
from have
group by id;
0 голосов
/ 11 октября 2018

Порядковый номер в группе может быть легко вычислен с помощью оператора SUM.Синтаксис: <variable> + <expression>;

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

data want;
  set have (rename=(num=num_original));
  by ID;
  if first.ID then num = 1; else num + 1;
run;
0 голосов
/ 11 октября 2018
proc sort data=position;
  by ID NUM;
run;

РЕДАКТИРОВАТЬ: Я думаю, что я неправильно понял вопрос.Что вы действительно хотите:

proc sort data=position;
  by ID descending NUM;
run;

data want (rename=(new_NUM=NUM));
  set position (drop=NUM);
  by ID;
  if first.ID then new_NUM = 1;
  output;
  new_NUM + 1;
run;
...