merge - 在SAS中,如何通过某个ID将多行连接成1

标签 merge sas concatenation string-concatenation retain

我有一张这样的 table

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.

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

最佳答案

使用 SAS Retain 功能连接文本,并且仅在读取新的 org_ID 时输出。

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

工作代码:(您的输入数据必须经过排序)

data have;
infile datalines dlm=',' dsd; 
length org_ID 8.  linenr 8. text $200.;
input org_ID linenr  text $;
datalines;
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."
;
run;

data want;
set have nobs=nobs;
retain longtext;
retain id;
if(_N_=1) then do; longtext=text; id=org_ID; end;
else if org_ID ne id then do; output; longtext=text; id=org_ID; end;
else longtext=cats(longtext,text);
if (_N_=nobs) then do; output; end;
keep org_ID longtext;
run;

输出:

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

关于merge - 在SAS中,如何通过某个ID将多行连接成1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50149807/

相关文章:

Java字符串连接效率

java - 如何 append 到整数

Clojure 深度合并忽略 nil 值

r - 通过交叉检查 R tidyverse 中的两列来连接两个表

SAS在数据步骤中将字符转换为数字

python - 如何将两个图像并排连接?

R:合并同一变量的副本

git - Git 中的 merge 冲突与 Subversion 中的 merge 冲突相比如何?

java - 在 Tomcat 中使用单例数据库连接(连接到 SAS)

date - 由于数据类型不同,对 SAS 日期宏的引用不起作用