Penyiapan Data SAS

A. DATA

1. IRIS

Data yang digunakan adalah data Iris dari RA Fisher (1936), dengan 150 baris data dan 5 kolom.

Lima Kolom ini adalah :
1. sepal length in cm
2. sepal width in cm
3. petal length in cm
4. petal width in cm
5. class:
– Iris Setosa
– Iris Versicolor
– Iris Virginica

Iris dan Varietasnya

B. Proses Memasukkan Data ke SAS

1. External (OutStream)

Pada proses ini, data berada di luar Program SAS. Untuk proses memasukkan data secara External ini, Anda dipersilahkan :
1. Membuka link github berikut ini : iris
2. Klik Kanan, Save As iris.txt di Komputer Anda.
3. Upload pada SAS Studio Anda, sehingga File tersebut bisa Anda Akses melalui link semacam ini /home/User_ID_Anda/sasuser.v94/iris.txt

Untuk memasukan Data iris ke System secara OutStream, Anda bisa menggunakan syntax semacam ini.

DATA iris_outstream;
INFILE "/home/User_ID_Anda/sasuser.v94/iris.txt";
INPUT sepal_length sepal_width petal_length petal_width species$;
CARDS;

Ingat untuk species Anda harus menggunakan tipe $, karena species merupakan karakter. Anda akan mendapatkan hasil kurang lebih seperti ini, dengan 150 baris ke bawah. (Catatan : pada modul ini hanya ditampilkan 6 baris).

sepal_length sepal_width petal_length petal_width species
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5.0 3.6 1.4 0.2 setosa
5.4 3.9 1.7 0.4 setosa

2. Instream

Pada proses InStream ini, data berada di dalam program SAS.

DATA iris_instream;
INPUT sepal_length sepal_width petal_length petal_width species$;
CARDS;
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5.0 3.6 1.4 0.2 setosa
5.4 3.9 1.7 0.4 setosa
4.6 3.4 1.4 0.3 setosa
5.0 3.4 1.5 0.2 setosa
4.4 2.9 1.4 0.2 setosa
4.9 3.1 1.5 0.1 setosa
5.4 3.7 1.5 0.2 setosa
4.8 3.4 1.6 0.2 setosa
4.8 3.0 1.4 0.1 setosa
4.3 3.0 1.1 0.1 setosa
5.8 4.0 1.2 0.2 setosa
5.7 4.4 1.5 0.4 setosa
5.4 3.9 1.3 0.4 setosa
5.1 3.5 1.4 0.3 setosa
5.7 3.8 1.7 0.3 setosa
5.1 3.8 1.5 0.3 setosa
5.4 3.4 1.7 0.2 setosa
5.1 3.7 1.5 0.4 setosa
4.6 3.6 1.0 0.2 setosa
5.1 3.3 1.7 0.5 setosa
4.8 3.4 1.9 0.2 setosa
5.0 3.0 1.6 0.2 setosa
5.0 3.4 1.6 0.4 setosa
5.2 3.5 1.5 0.2 setosa
5.2 3.4 1.4 0.2 setosa
4.7 3.2 1.6 0.2 setosa
4.8 3.1 1.6 0.2 setosa
5.4 3.4 1.5 0.4 setosa
5.2 4.1 1.5 0.1 setosa
5.5 4.2 1.4 0.2 setosa
4.9 3.1 1.5 0.1 setosa
5.0 3.2 1.2 0.2 setosa
5.5 3.5 1.3 0.2 setosa
4.9 3.1 1.5 0.1 setosa
4.4 3.0 1.3 0.2 setosa
5.1 3.4 1.5 0.2 setosa
5.0 3.5 1.3 0.3 setosa
4.5 2.3 1.3 0.3 setosa
4.4 3.2 1.3 0.2 setosa
5.0 3.5 1.6 0.6 setosa
5.1 3.8 1.9 0.4 setosa
4.8 3.0 1.4 0.3 setosa
5.1 3.8 1.6 0.2 setosa
4.6 3.2 1.4 0.2 setosa
5.3 3.7 1.5 0.2 setosa
5.0 3.3 1.4 0.2 setosa
7.0 3.2 4.7 1.4 versicolor
6.4 3.2 4.5 1.5 versicolor
6.9 3.1 4.9 1.5 versicolor
5.5 2.3 4.0 1.3 versicolor
6.5 2.8 4.6 1.5 versicolor
5.7 2.8 4.5 1.3 versicolor
6.3 3.3 4.7 1.6 versicolor
4.9 2.4 3.3 1.0 versicolor
6.6 2.9 4.6 1.3 versicolor
5.2 2.7 3.9 1.4 versicolor
5.0 2.0 3.5 1.0 versicolor
5.9 3.0 4.2 1.5 versicolor
6.0 2.2 4.0 1.0 versicolor
6.1 2.9 4.7 1.4 versicolor
5.6 2.9 3.6 1.3 versicolor
6.7 3.1 4.4 1.4 versicolor
5.6 3.0 4.5 1.5 versicolor
5.8 2.7 4.1 1.0 versicolor
6.2 2.2 4.5 1.5 versicolor
5.6 2.5 3.9 1.1 versicolor
5.9 3.2 4.8 1.8 versicolor
6.1 2.8 4.0 1.3 versicolor
6.3 2.5 4.9 1.5 versicolor
6.1 2.8 4.7 1.2 versicolor
6.4 2.9 4.3 1.3 versicolor
6.6 3.0 4.4 1.4 versicolor
6.8 2.8 4.8 1.4 versicolor
6.7 3.0 5.0 1.7 versicolor
6.0 2.9 4.5 1.5 versicolor
5.7 2.6 3.5 1.0 versicolor
5.5 2.4 3.8 1.1 versicolor
5.5 2.4 3.7 1.0 versicolor
5.8 2.7 3.9 1.2 versicolor
6.0 2.7 5.1 1.6 versicolor
5.4 3.0 4.5 1.5 versicolor
6.0 3.4 4.5 1.6 versicolor
6.7 3.1 4.7 1.5 versicolor
6.3 2.3 4.4 1.3 versicolor
5.6 3.0 4.1 1.3 versicolor
5.5 2.5 4.0 1.3 versicolor
5.5 2.6 4.4 1.2 versicolor
6.1 3.0 4.6 1.4 versicolor
5.8 2.6 4.0 1.2 versicolor
5.0 2.3 3.3 1.0 versicolor
5.6 2.7 4.2 1.3 versicolor
5.7 3.0 4.2 1.2 versicolor
5.7 2.9 4.2 1.3 versicolor
6.2 2.9 4.3 1.3 versicolor
5.1 2.5 3.0 1.1 versicolor
5.7 2.8 4.1 1.3 versicolor
6.3 3.3 6.0 2.5 virginica
5.8 2.7 5.1 1.9 virginica
7.1 3.0 5.9 2.1 virginica
6.3 2.9 5.6 1.8 virginica
6.5 3.0 5.8 2.2 virginica
7.6 3.0 6.6 2.1 virginica
4.9 2.5 4.5 1.7 virginica
7.3 2.9 6.3 1.8 virginica
6.7 2.5 5.8 1.8 virginica
7.2 3.6 6.1 2.5 virginica
6.5 3.2 5.1 2.0 virginica
6.4 2.7 5.3 1.9 virginica
6.8 3.0 5.5 2.1 virginica
5.7 2.5 5.0 2.0 virginica
5.8 2.8 5.1 2.4 virginica
6.4 3.2 5.3 2.3 virginica
6.5 3.0 5.5 1.8 virginica
7.7 3.8 6.7 2.2 virginica
7.7 2.6 6.9 2.3 virginica
6.0 2.2 5.0 1.5 virginica
6.9 3.2 5.7 2.3 virginica
5.6 2.8 4.9 2.0 virginica
7.7 2.8 6.7 2.0 virginica
6.3 2.7 4.9 1.8 virginica
6.7 3.3 5.7 2.1 virginica
7.2 3.2 6.0 1.8 virginica
6.2 2.8 4.8 1.8 virginica
6.1 3.0 4.9 1.8 virginica
6.4 2.8 5.6 2.1 virginica
7.2 3.0 5.8 1.6 virginica
7.4 2.8 6.1 1.9 virginica
7.9 3.8 6.4 2.0 virginica
6.4 2.8 5.6 2.2 virginica
6.3 2.8 5.1 1.5 virginica
6.1 2.6 5.6 1.4 virginica
7.7 3.0 6.1 2.3 virginica
6.3 3.4 5.6 2.4 virginica
6.4 3.1 5.5 1.8 virginica
6.0 3.0 4.8 1.8 virginica
6.9 3.1 5.4 2.1 virginica
6.7 3.1 5.6 2.4 virginica
6.9 3.1 5.1 2.3 virginica
5.8 2.7 5.1 1.9 virginica
6.8 3.2 5.9 2.3 virginica
6.7 3.3 5.7 2.5 virginica
6.7 3.0 5.2 2.3 virginica
6.3 2.5 5.0 1.9 virginica
6.5 3.0 5.2 2.0 virginica
6.2 3.4 5.4 2.3 virginica
5.9 3.0 5.1 1.8 virginica
;

Ingat untuk species Anda harus menggunakan tipe $, karena species merupakan karakter. Anda akan mendapatkan hasil kurang lebih seperti ini, dengan 150 baris ke bawah. (Catatan : pada modul ini hanya ditampilkan 6 baris).

sepal_length sepal_width petal_length petal_width species
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5.0 3.6 1.4 0.2 setosa
5.4 3.9 1.7 0.4 setosa

DISKUSI : Lebih baik mana OutStream atau InStream?

3. Penyimpanan Permanen

Anda perlu menyatakan secara khusus di R, jika data Anda akan disimpan dalam Library SAS. Hal ini berguna jika data tersebut Anda simpan untuk digunakan berulang kali dan tetap ada jika ada keluar dari Program SAS. Jika tidak Anda nyatakan secara khusus, maka data Anda akan disimpan di Temporary Library WORK.

Di proses ini, saya membuat folder untuk penyimpanan di SAS Studio terlebih dahulu.

LIBNAME STA1261 "/home/User_ID_Anda/sasuser.v94/NamaFolderAnda";
DATA STA1261.iris_outstream;
infile "/home/User_ID_Anda/sasuser.v94/iris.txt";
input sepal_length sepal_width petal_length petal_width species$;
cards;

Ada 2 hal yang berbeda dengan penyimpanan sementara, yaitu :
1. terdapat Perintah LIBNAME yang berisi NAMA_LIBRARY yaitu STA1261 dan lokasi penyimpanannya yaitu /home/User_ID_Anda/sasuser.v94/NamaFolderAnda
2. Akses terhadap DATA, yaitu bukan langsung dengan data iris_outstream, melainkan Anda harus menyebutkan NAMA_LIBRARY nya terlebih dahulu STA1261.iris_outstream

Catatan : Pada kasus data yang disimpan secara temporary, selain Anda bisa memanggilnya secara langsung iris_InStream atau iris_OutStream, Anda bisa memanggilnya dengan WORK.iris_instream atau WORK.iris_outstream

PROC PRINT DATA=iris_outstream;
RUN;

akan sama dengan

PROC PRINT DATA=WORK.iris_outstream;
RUN;

C. PROC

Terdiri dari sekelompok pernyataan SAS yang memanggil dan mengeksekusi sebuah prosedur (PROCedure)

2. CONTENTS Procedure (PROC CONTENTS)

PROC CONTENTS data=iris_outstream;
TITLE 'INI JUDUL LAGI';
RUN;

Lebih lanjut mengenai PROC CONTENTS. SAS Documentation PROC CONTENTS

Seharusnya pada titik ini Anda menyadari, bahwa ada kesalahan cukup fatal di materi saya di atas. Jika Anda mengetahuinya, silahkan berdiri, angkat tangan Anda, sebutkan Nama & NIM Anda, serta sebutkan kesalahan pada sintaks di atas, untuk 10 poin tambahan pada nilai akhir Praktikum Anda. (Hanya untuk 1 orang!). Saya sudah jelaskan mengenai ini minggu lalu.

3. SORT Procedure (PROC SORT)

PROC SORT DATA=iris_outstream;
BY sepal_length;
RUN;

Lebih lanjut mengenai PROC SORT. SAS Documentation PROC SORT

D. Pernyataan pada Tahapan Data

1. SET

DATA SETOSA VERSICOL VIRGINIC;
SET iris_outstream;
IF (species='setosa') THEN OUTPUT SETOSA;
IF (species='versicol') THEN OUTPUT VERSICOL;
IF (species='virginic') THEN OUTPUT VIRGINIC;
RUN;

2. DROP

DATA SETOSA VERSICOL VIRGINIC (DROP=sepal_width sepal_length);
SET iris_outstream;
IF (species='setosa') THEN OUTPUT SETOSA;
IF (species='versicol') THEN OUTPUT VERSICOL;
IF (species='virginic') THEN OUTPUT VIRGINIC;
RUN;

3. KEEP

DATA SETOSA VERSICOL VIRGINIC (KEEP=sepal_width sepal_length);
SET iris_outstream;
IF (species='setosa') THEN OUTPUT SETOSA;
IF (species='versicol') THEN OUTPUT VERSICOL;
IF (species='virginic') THEN OUTPUT VIRGINIC;
RUN;

4. IF

DATA SETOSA VERSICOL VIRGINIC;
SET iris_outstream;
IF (species='setosa') THEN OUTPUT SETOSA;
IF (species='versicol') THEN OUTPUT VERSICOL;
IF (species='virginic') THEN OUTPUT VIRGINIC;
RUN;

5. DO-loop

Kenapa butuh Loop?

DATA MeterToFeet; 
INPUT meter @@; 
Feet = Meter*3.281;
LINES; 
0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 6 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 7 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 8 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 9 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9 10 10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8 10.9 11 11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 12 12.1 12.2 12.3 12.4 12.5 12.6 12.7 12.8 12.9 13 13.1 13.2 13.3 13.4 13.5 13.6 13.7 13.8 13.9 14 14.1 14.2 14.3 14.4 14.5 14.6 14.7 14.8 14.9 15 15.1 15.2 15.3 15.4 15.5 15.6 15.7 15.8 15.9 16 16.1 16.2 16.3 16.4 16.5 16.6 16.7 16.8 16.9 17 17.1 17.2 17.3 17.4 17.5 17.6 17.7 17.8 17.9 18 18.1 18.2 18.3 18.4 18.5 18.6 18.7 18.8 18.9 19 19.1 19.2 19.3 19.4 19.5 19.6 19.7 19.8 19.9 20
;
DATA MeterToFeet2;
DO Meter = 0.1 TO 20 BY 0.1;
    Feet = Meter*3.281;
    OUTPUT;
END;
Anda pilih yang mana?

Contoh Lain

DATA normal1;
    DO z = -4 TO 4.05 BY 0.2;
    density = (1.0/SQRT(2*3.1415926536))*EXP(-z**2/2);
    OUTPUT;
END;

PROC PLOT DATA=normal1;
PLOT density*z / HAXIS=-4 TO 4 BY 1;
TITLE ‘Sebaran Normal Baku’;
RUN;
DATA normal2;
n = 40;
  DO i = 1 TO n;
  x = 50 + 10*NORMAL(0);
  OUTPUT;
END;

PROC CHART DATA=normal2;
  VBAR x / MIDPOINTS=20 TO 80 BY 5;
  TITLE ‘Bangkitan data normal dengan rataan 50 dan simpangan 10’;
RUN;
DATA seragam;
  DO i = 1 TO 100;
  y = UNIFORM(0);
  OUTPUT;
END;

PROC CHART DATA=seragam;
  VBAR y / MIDPOINTS=0.05 TO 0.95 BY 0.1;
  TITLE ‘Bangkitan data seragam (uniform) dengan selang nilai (0,1)’;
RUN;

Catatan

Materi Kuliah

DATA normal3;
n = 40;
    DO i = 1 TO 500;
        DO j = 1 TO n;
            x = 50 + 10*NORMAL(0);
            jum = jum + x;
        END;
        Rataan = jum / n;
    OUTPUT;
    END;

PROC PRINT DATA=normal3;
TITLE ‘Bangkitan data 500 kali masing2 dengan n=40’;

PROC CHART DATA=normal3;
VBAR rataan / MIDPOINTS=40 TO 60 BY 2;
RUN;

Code Perbaikan

DATA normal3;
n = 40;
    DO i = 1 TO 500;
    jum = 0;
        DO j = 1 TO n;
            x = 50 + 10*NORMAL(0);
            jum = jum + x;
        END;
        Rataan = jum / n;
    OUTPUT;
    END;

PROC PRINT DATA=normal3;
TITLE ‘Bangkitan data 500 kali masing2 dengan n=40’;

PROC CHART DATA=normal3;
VBAR rataan / MIDPOINTS=40 TO 60 BY 2;
RUN;

Ada satu baris yang berbeda pada syntax ini yang membedakannya dengan Materi Kuliah. Kira-kira kenapa perlu dilakukan itu? Kenapa syntax sebelumnya tidak menunjukkan hasil? Kenapa Syntax perbaikan memberikan hasil? Jika Anda mengetahuinya, silahkan berdiri, angkat tangan Anda, sebutkan Nama & NIM Anda, serta sebutkan kesalahan pada sintaks di atas, untuk 10 poin tambahan pada nilai akhir Praktikum Anda. (Hanya untuk 1 orang!). Saya sudah jelaskan jawaban ini beberapa waktu lalu.