Search code examples
sasenterprise-guide

How can I add data into a SAS table of different groups?


The primary key is car, model, and date, I have to fill in the empty fields with the previous data but that its primary key is car and model. Example:

 Row    Car       Model   Date   Sec    Door    Colour
 1      Ford      Focus   2002   1      5       blue
 2      Ford      Focus   2002   2      5       blue
 3      Ford      Focus   2002   3      5       blue
 4      Ford      Focus   2002   4      5       blue
 5      Ford      kuga    2004   5      5       blue
 6      Ford      kuga    2004   1      5   
 7      Ford      kuga    2004   2      5   
 8      Ford      Mondeo  2004   3      5       red
 9      Ford      Mondeo  2004   4      4       red
10      Ford      Mondeo  2004   5              red
11      Ford      Mondeo  2004   6              red
12      Ford      Mondeo  2004   7      4       red
13      Mercedes  Benz    2010   1      3   
14      Mercedes  Benz    2010   1      3       white
15      Mercedes  Benz    2010   1      5       Yellow
16      Mercedes  190E    2011   1              red
17      Mercedes  190E    2012   1      6   

And the final output of the table is ...

Output:

 Row    Car       Model   Date   Sec    Door    Colour
 1    Ford       Focus    2002   1      5       blue
 2    Ford       Focus    2002   2      5       blue
 3    Ford       Focus    2002   3      5       blue
 4    Ford       Focus    2002   4      5       blue
 5    Ford       kuga     2004   5      5       blue
 6    Ford       kuga     2004   1      5       blue
 7    Ford       kuga     2004   2      5       blue
 8    Ford       Mondeo   2004   3      5       red
 9    Ford       Mondeo   2004   4      4       red
10    Ford       Mondeo   2004   5      4       red
11    Ford       Mondeo   2004   6      4       red
12    Ford       Mondeo   2004   7      4       red
13    Mercedes   Benz     2010   1      3       red
14    Mercedes   Benz     2010   1      3       white
15    Mercedes   Benz     2010   1      5       Yellow
16    Mercedes   190E     2011   1      5       red
17    Mercedes   190E     2012   1      6       red

How is it done? Thank you


Solution

  • The UPDATE trick will work to produce the output you show.

    data cars;
       retain dummyby 1;
       infile cards firstobs=2;
       input row car $ model $ date sex door colour $;
       cards;
    Row    Car       Model   Date   Sec    Door    Colour
     1      Ford      Focus   2002   1      5       blue
     2      Ford      Focus   2002   2      5       blue
     3      Ford      Focus   2002   3      5       blue
     4      Ford      Focus   2002   4      5       blue
     5      Ford      kuga    2004   5      5       blue
     6      Ford      kuga    2004   1      5       .
     7      Ford      kuga    2004   2      5       .
     8      Ford      Mondeo  2004   3      5       red
     9      Ford      Mondeo  2004   4      4       red
    10      Ford      Mondeo  2004   5      .       red
    11      Ford      Mondeo  2004   6      .       red
    12      Ford      Mondeo  2004   7      4       red
    13      Mercedes  Benz    2010   1      3       .
    14      Mercedes  Benz    2010   1      3       white
    15      Mercedes  Benz    2010   1      5       Yellow
    16      Mercedes  190E    2011   1      .       red
    17      Mercedes  190E    2012   1      6       .
    ;;;;
       run;
    data locf;
       update cars(obs=0) cars;
       by dummyby; *Use BY CAR; to LOCF for each car.;
       output;
       drop dummyby;
       run;
    proc print;
       run;
    

    enter image description here