Resources

Data Processing and I/O in PROC IML

 /****************************************************************/
 /*            S A S   S A M P L E   L I B R A R Y               */
 /*                                                              */
 /*    NAME: DATADEMO                                            */
 /*   TITLE: Data Processing and I/O in PROC IML                 */
 /* PRODUCT: IML                                                 */
 /*  SYSTEM: ALL                                                 */
 /*    KEYS: MATRIX DATMAN                                       */
 /*   PROCS: IML                                                 */
 /*    DATA:                                                     */
 /*                                                              */
 /* SUPPORT: LWB                         UPDATE:  NOV1989        */
 /*     REF:                                                     */
 /*    MISC: THIS PROGRAM WILL CREATE AN EXTERNAL FILE.          */
 /*                                                              */
 /****************************************************************/

 /*--create filename for class data--*/
%macro filedef;
  %if &sysscp=OS
  %then %str(filename classf '&class' recfm=vb
                      lrecl=300 blksize=15825;);

  %else %if &sysscp=CMS
        %then  %str(filename classf 'class dat';);

        %else  /* other hosts */
               %str(filename classf 'class.dat';);
%mend ;
%filedef

 /*--create external file for class information--*/
data _null_;
   file classf;
   input name $ sex $ age height weight;
   put name $ sex $ age height weight;
   cards;
JOYCE   F 11 51.3 50.5
THOMAS  M 11 57.5 85.0
JAMES   M 12 57.3 83.0
JANE    F 12 59.8 84.5
JOHN    M 12 59.0 99.5
LOUISE  F 12 56.3 77.0
ROBERT  M 12 64.8 128.0
ALICE   F 13 56.5 84.0
BARBARA F 13 65.3 98.0
JEFFREY M 13 62.5 84.0
CAROL   F 14 62.8 102.5
HENRY   M 14 63.5 102.5
ALFRED  M 14 69.0 112.5
JUDY    F 14 64.3 90.0
JANET   F 15 62.5 112.5
MARY    F 15 66.5 112.0
RONALD  M 15 67.0 133.0
WILLIAM M 15 66.5 112.0
PHILIP  M 16 72.0 150.0
;

proc iml;

 /*--read in data file for class and create class data set--*/
name="12345678"; sex="m";
create class var{name sex age height weight};

infile classf;

do data;
   input name $ sex $ age height weight;
   append;
   end;
close class;
closefile classf;

 /*--basic listing--*/
use class;
show datasets;
show contents;
list all;
list;
list point 5;
list next;
list next;
list;
list point {2 4 9};
p={2 4 9};
print p;
list point p;
list var{name sex};
list point p var {name age};
v={name sex age};
list var v;
list all var v where(sex="M");
list all where(age>13);

 /*--find--*/
find all where(age>13) into p;
print p;
list point p;
find all where(age>14) into q;
print p q;
list point q;

 /*--read---*/
read point q;
show names;
print name age height weight;
read point 8;
print name age height weight;
read all var{name height} where(height>62);
print name height;

create new var{name height};
append;
close new class;

 /*--where clause--*/
use class var{name};
list all;
list all where(name=:"J");
list all where(name=:"JA");
list all where(name=*"LOIS");
list all where(name=*"PHILLIP");
list all where(name?"AL");
list all where(name={alfred carol judy});
list all where(name=*{jon jan });
close class;

 /*--replace--*/
edit class;
list all where(name="JOHN");
age=13; replace point 5 var {age};
list point 5;
read point 5;
age=18; height=62.; weight=99;
append;
list point 20;
close class;

 /*--sort--*/
sort class out=class2 by age;

use class2; list all;

 /*--index--*/
index name;
list all where(name=:"JO");
list next;
list next;
close class2;

 /*--summary--*/
use class;
summary var{height weight} class{age} stat{mean std};
close class;