Search code examples
mergesasconcatenationstring-concatenationretain

In SAS, how to concatenate multiple rows into 1 by some ID


I have a table like this

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.

As you can see, for some org_ID, they appear multiple times because one line of text is not enough for them. When this happens, the linenr shows multiple numbers. Now I want to concatenate multiple lines of text into one when org_ID is the same. How shall I do this? Many thanks in advance.


Solution

  • Use SAS Retain functionality to concatenate the text and only output when an new org_ID is read.

    Note: The two IF statements handles the cases of first row and last row; where there is no Previous ID or no Next ID.

    Working Code: (Your Input data must be sorted)

    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;
    

    Output:

    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