Merge 在SAS中,如何通过某个ID将多行连接成一行

Merge 在SAS中,如何通过某个ID将多行连接成一行,merge,sas,concatenation,string-concatenation,retain,Merge,Sas,Concatenation,String Concatenation,Retain,我有一张这样的桌子 org_ID linenr text 811558672 10 Legevirksomhet. 811560782 10 Clavier Classics er et musikkselskap som produserer komposisjoner og 811560782 20 arrangementer av svært høy kvalitet. De kombinerer den klassiske 811560782

我有一张这样的桌子

org_ID          linenr  text
811558672   10  Legevirksomhet.
811560782   10  Clavier Classics er et musikkselskap som produserer komposisjoner og
811560782   20  arrangementer av svært høy kvalitet. De kombinerer den klassiske
811560782   30  musikktradisjonen med moderne teknikker og deres kunder spenner fra
811560782   40  individuelle musikere til ensembler, festivalarrangører, konserthus,
811560782   50  kulturinstitusjoner, eventskapere og mediaprodusenter.
811560812   10  Grafisk design, illustrasjon og nærliggende virksomhet.
811561592   10  Sosial- og helsetjenesten. Konsulentvirksomhet: Veiledning til
811561592   20  foreldre, fosterhjem, skole og barnehage.

如您所见,对于某些组织ID,它们会出现多次,因为一行文本对它们来说是不够的。发生这种情况时,linenr将显示多个数字。现在,当org_ID相同时,我想将多行文本连接成一行。我该怎么做?非常感谢。

使用SAS
Retain
功能连接文本,仅在读取新组织ID时输出

注意:两个IF语句处理第一行和最后一行的情况;没有上一个ID或没有下一个ID

工作代码:(必须对输入数据进行排序)

输出:

org_ID=811560782 longtext=Legevirksomhet.
org_ID=811560812 longtext=Clavier Classics er et musikkselskap som produserer komposisjoner ogarrangementer av svært høy kva
org_ID=811561592 longtext=Grafisk design, illustrasjon og nærliggende virksomhet.
org_ID=811561592 longtext=Sosial- og helsetjenesten. Konsulentvirksomhet: Veiledning tilforeldre, fosterhjem, skole og barneha

DOW循环可以将org_ID组中的每一行文本累积成最终的长文本。应为长文本指定特定的长度,以防止在使用默认长度时发生截断。您可能希望也可能不希望在连接的行之间使用空格分隔符

data want(keep=org_ID longtext);
  do until (last.org_ID);
    set have;
    by org_ID;
    length longtext $2000;
    longtext = catx(' ', longtext, text);
  end;
run;
如果数据未排序,但组织ID行是连续的,则可以使用

    by org_ID notsorted;
那么发生了什么

  • Longtext是一个非数据集变量,因此在数据步骤的顶部会自动重置为missing
  • 数据步骤对组中的每一行进行迭代,直到组中的最后一行
  • 变量
    longtext
    的长度在set语句之后指定,因此它是程序数据向量(pdv)中的最后一个变量,因此是保留变量的第二列
  • catx
    用于累积组内文本数据的连接。空格用于分隔文本数据部分
如果不需要空格分隔符,请使用

    longtext = cats(longtext, text);
可能重复的
    longtext = cats(longtext, text);