SAS-基于表中另一个变量值的变量值的倒序

时间:2018-10-10 21:18:38

标签: string sas

总而言之,我正在将文档的句子解析为单个句子。我需要更大的理由。

我拥有的是“位置”表,该表为我提供了文档ID(ID)和该文档中一个句子的句子编号(NUM)。我也有一列显示已分析的句子(句子)。

因此,示例表为:

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的第一句,这也是所有其他文档的模式也是如此。

我想颠倒每个ID的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。

因此,我只希望输出表中每个“ ID”变量值内的“ NUM”变量互换。

3 个答案:

答案 0 :(得分:5)

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;

答案 1 :(得分:3)

可以使用SUM语句轻松计算组中的序列号。语法为<variable> + <expression>;

假定该组中的句子值按所需顺序排列,但需要在从1开始的组序号中重新关联。

data want;
  set have (rename=(num=num_original));
  by ID;
  if first.ID then num = 1; else num + 1;
run;

答案 2 :(得分:2)

类似的东西应该可以在Proc SQL中工作

proc sql;
create table want as 
select id, (max(num)+1)-num as num, sentence
from have
group by id;