Skip Headers

SAS  SPSS  R-PROJECT  S-PLUS  PROC-SQL

통 계
프 로 그 램 비 교

Go to Documentation Home
HOME
Go to Book List
PRO_home
Go to Table of Contents
연구회
Go to Index
자료실
Go to Master Index
R-PROJECT
Go to Feedback page
MAIL

Go to previous page
Previous
Go to next page
Next

6. 관측값 포맷팅


1. SAS
2. SPSS
3. R-PROJECT
4. S-PLUS
5. PROC SQL

 


1. SAS

MAIN

 

DATA mydata;

     INFILE 'c:\data\mydata.csv' delimiter = ','

            MISSOVER DSD LRECL=32767 firstobs=2 ;

     INPUT id workshop gender $ q1 q2 q3 q4;

run;

PROC PRINT; RUN;

PROC FORMAT;

     VALUE Agreement 1="Disagree"

                     2="Disagree"

                     3="Neutral"

                     4="Agree"   

                     5="Agree";

run;

 

* 5점 척도를 3점 척도로 변환. 1과 2를 하나의 척도로 4와 5를 또하나의 척도로 변환.;

DATA mydata1;

 SET mydata;

     ARRAY q q1-q4;

     ARRAY qr qr1-qr4; *r for recoded;

     DO i=1 to 4;

        qr{i}=q{i};

        if      q{i}=1 then qr{i}=2;

        else if q{i}=5 then qr{i}=4;

     END;

     FORMAT q1-q4 qr1-qr4 Agreement.;

RUN;

proc print;run;

id workshop gender q1       q2          q3    q4       qr1      qr2        qr3    qr4      i

 1     1      f    Disagree Disagree Agree    Disagree Disagree Disagree Agree    Disagree 5

 2     2      f    Disagree Disagree Agree    Disagree Disagree Disagree Agree    Disagree 5

 3     1      f    Disagree Disagree Agree    Neutral  Disagree Disagree Agree    Neutral  5

 4     2      f    Neutral  Disagree        . Neutral  Neutral  Disagree        . Neutral  5

 5     1      m    Agree    Agree    Disagree Agree    Agree    Agree    Disagree Agree    5

 6     2      m    Agree    Agree    Agree    Agree    Agree    Agree    Agree    Agree    5

 7     1      m    Agree    Neutral  Agree    Agree    Agree    Neutral  Agree    Agree    5

 8     2      m    Agree    Agree    Agree    Agree    Agree    Agree    Agree    Agree    5

 

proc print data=mydata1;

     format q1-q4 qr1-qr4;

run;

OBS    id    workshop    gender    q1    q2    q3    q4    qr1    qr2    qr3    qr4    i

 1      1        1         f        1     1     5     1     2      2      4      2     5

 2      2        2         f        2     1     4     1     2      2      4      2     5

 3      3        1         f        2     2     4     3     2      2      4      3     5

 4      4        2         f        3     1     .     3     3      2      .      3     5

 5      5        1         m        4     5     2     4     4      4      2      4     5

 6      6        2         m        5     4     5     5     4      4      4      4     5

 7      7        1         m        5     3     4     4     4      3      4      4     5

 8      8        2         m        4     5     5     5     4      4      4      4     5

 

* 자동적으로 포맷 이용.

PROC FREQ data=mydata1;

     TABLES q1-q4;

RUN;

누적       누적

      q1      빈도      백분율      빈도      백분율

----------------------------------------------------

Disagree           3     37.50           3     37.50

Neutral            1     12.50           4     50.00

Agree              4     50.00           8    100.00

 

                                    누적       누적

      q2      빈도      백분율      빈도      백분율

----------------------------------------------------

Disagree           4     50.00           4     50.00

Neutral            1     12.50           5     62.50

Agree              3     37.50           8    100.00

 

                                    누적       누적

      q3      빈도      백분율      빈도      백분율

----------------------------------------------------

Disagree           1     14.29           1     14.29

Agree              6     85.71           7    100.00

                 결측값의 개수 = 1

 

                                    누적       누적

      q4      빈도      백분율      빈도      백분율

----------------------------------------------------

Disagree           2     25.00           2     25.00

Neutral            2     25.00           4     50.00

Agree              4     50.00           8    100.00

 

* q변수들은 포맷을 적용 안함.;

* high/low 값은 1/5 로 된다.;

PROC UNIVARIATE data=mydata1;

     VAR q1-q4;

RUN;

분위수(정의 5)

분위수         추정값

100% 최대값       5.0

 99%              5.0

 95%              5.0

 90%              5.0

 75% Q3           4.5

 50% 중위수       3.5

 25% Q1           2.0

 10%              1.0

  5%              1.0

  1%              1.0

  0% 최소값       1.0

 

* qr변수들은 3점 척도 적용한다.;

* high/low 값은 1/5 로 된다.;

PROC UNIVARIATE data=mydata1;

     VAR qr1-qr4;

RUN;

 분위수         추정값

 100% 최대값       4.0

  99%              4.0

  95%              4.0

  90%              4.0

  75% Q3           4.0

  50% 중위수       3.5

  25% Q1           2.0

  10%              2.0

   5%              2.0

   1%              2.0

   0% 최소값       2.0



2. SPSS

MAIN

* SPSS Program for Recoding Variables.

GET FILE='C:\mydata.sav'.

RECODE q1 to q4 (1=2) (5=4).

SAVE OUTFILE='C:\myleft.sav'.

EXECUTE .

 


3. R-PROJECT

MAIN

 

* Recoding 변수를 위한 R-Project 프로그램.

load(file="c:\\mydata.Rdata")

print(mydata)

attach(mydata)

 

install.packages("Hmisc")

library(car)

 

# recode함수를 이용하여 관측값 변경;

mydata$q1<-recode(mydata$q1,"1=2;5=4")

mydata$q2<-recode(mydata$q2,"1=2;5=4")

mydata$q3<-recode(mydata$q3,"1=2;5=4")

mydata$q4<-recode(mydata$q4,"1=2;5=4")

mydata

workshop gender q1 q2 q3 q4

1         1      f  2  2  4  2

2         2      f  2  2  4  2

3         1      f  2  2  4  3

4         2      f  3  2 NA  3

5         1      m  4  4  2  4

6         2      m  4  4  4  4

7         1      m  4  3  4  4

8         2      m  4  4  4  4

 

# 변수명의 두개의 세트 생성.

myQnames  <- paste( "q",  1:4, sep="")

myQRnames <- paste( "qr", 1:4, sep="")

print(myQnames) # 원 변수명.

[1] "q1" "q2" "q3" "q4"

 

print(myQRnames)  # Recoded될 변수의 이름.

[1] "qr1" "qr2" "qr3" "qr4"

 

# 데이터 프레임에서 q변수를 추출.

myQRvars <- mydata[ ,myQnames]

print(myQRvars)

  q1 q2 q3 q4
1  2  2  4  2
2  2  2  4  2
3  2  2  4  3
4  3  2 NA  3
5  4  4  2  4
6  4  4  4  4
7  4  3  4  4
8  4  4  4  4

 

# 변수명을 변경.

names(myQRvars) <- myQRnames
print(myQRvars)

 qr1 qr2 qr3 qr4
1  2   2   4   2
2  2   2   4   2
3  2   2   4   3
4  3   2  NA   3
5  4   4   2   4
6  4   4   4   4
7  4   3   4   4
8  4   4   4   4

 

# 많은 변수에 라벨을 적용하기 위해 함수 생성.

myRecoder <- function(x) { recode(x,"1=2;5=4") }

 

# 하나의 변수에 함수 적용.

print( myRecoder(myQRvars$qr1) )

[1] 2 2 2 3 4 4 4 4

 

# lapply함수를 사용하여 모든 변수에 적용하기.

myQRvars[ ,myQRnames] <- lapply( myQRvars[ ,myQRnames ], myRecoder )

print(myQRvars)

qr1 qr2 qr3 qr4

1   2   2   4   2

2   2   2   4   2

3   2   2   4   3

4   3   2  NA   3

5   4   4   2   4

6   4   4   4   4

7   4   3   4   4

8   4   4   4   4

 

# 원 변수와 새 변수 합치기.

mydata <- cbind(mydata,myQRvars)

print(mydata)

workshop  gender q1 q2 q3 q4 qr1 qr2 qr3 qr4

1        1      f  1  1  5  1   2   2   4   2

2        2      f  2  1  4  1   2   2   4   2

3        1      f  2  2  4  3   2   2   4   3

4        2      f  3  1 NA  3   3   2  NA   3

5        1      m  4  5  2  4   4   4   2   4

6        2      m  5  4  5  5   4   4   4   4

7        1      m  5  3  4  4   4   3   4   4

8        2      m  4  5  5  5   4   4   4   4

 

summary(mydata)

workshop   gender       q1             q2             q3      

 Min.   :1.0   f:4    Min.   :1.00   Min.   :1.00   Min.   :2.000 

 1st Qu.:1.0   m:4    1st Qu.:2.00   1st Qu.:1.00   1st Qu.:4.000 

 Median :1.5          Median :3.50   Median :2.50   Median :4.000 

 Mean   :1.5          Mean   :3.25   Mean   :2.75   Mean   :4.143 

 3rd Qu.:2.0          3rd Qu.:4.25   3rd Qu.:4.25   3rd Qu.:5.000 

 Max.   :2.0          Max.   :5.00   Max.   :5.00   Max.   :5.000 

                                                    NA's   :1.000 

 

       q4            qr1             qr2             qr3             qr4     

 Min.   :1.00   Min.   :2.000   Min.   :2.000   Min.   :2.000   Min.   :2.00 

 1st Qu.:2.50   1st Qu.:2.000   1st Qu.:2.000   1st Qu.:4.000   1st Qu.:2.75 

 Median :3.50   Median :3.500   Median :2.500   Median :4.000   Median :3.50 

 Mean   :3.25   Mean   :3.125   Mean   :2.875   Mean   :3.714   Mean   :3.25 

 3rd Qu.:4.25   3rd Qu.:4.000   3rd Qu.:4.000   3rd Qu.:4.000   3rd Qu.:4.00 

 Max.   :5.00   Max.   :4.000   Max.   :4.000   Max.   :4.000   Max.   :4.00 

                                                NA's   :1.000

 

 


4. S-PLUS

MAIN

 

mydata<-menuRecode(mydata,"q1",1,2)

mydata<-menuRecode(mydata,"q1",5,4)

mydata<-menuRecode(mydata,"q2",1,2)

mydata<-menuRecode(mydata,"q2",5,4)

mydata<-menuRecode(mydata,"q3",1,2)

mydata<-menuRecode(mydata,"q3",5,4)

mydata<-menuRecode(mydata,"q4",1,2)

mydata<-menuRecode(mydata,"q4",5,4)

mydata

workshop gender q1 q2 q3 q4

1        1      f  2  2  4  2

2        2      f  2  2  4  2

3        1      f  2  2  4  3

4        2      f  3  2 NA  3

5        1      m  4  4  2  4

6        2      m  4  4  4  4

7        1      m  4  3  4  4

8        2      m  4  4  4  4

 

mydata<-read.table ("c:/data/mydata.csv",header=TRUE,

sep=",",row.names="id")

print(mydata)

 

# 변수명의 두개의 세트 생성.

myQnames  <- paste( "q",  1:4, sep="")

myQRnames <- paste( "qr", 1:4, sep="")

print(myQnames) # 원 변수명.

[1] "q1" "q2" "q3" "q4"

 

print(myQRnames)  # Recoded될 변수의 이름.

[1] "qr1" "qr2" "qr3" "qr4"

 

# 데이터 프레임에서 q변수를 추출.

myQRvars <- mydata[ ,myQnames]

print(myQRvars)

  qr1 qr2 qr3 qr4

1   1   1   5   1

2   2   1   4   1

3   2   2   4   3

4   3   1  NA   3

5   4   5   2   4

6   5   4   5   5

7   5   3   4   4

8   4   5   5   5

 

# 변수명을 변경.

names(myQRvars) <- myQRnames
print(myQRvars)

qr1 qr2 qr3 qr4

1   1   1   5   1

2   2   1   4   1

3   2   2   4   3

4   3   1  NA   3

5   4   5   2   4

6   5   4   5   5

7   5   3   4   4

8   4   5   5   5

 

# 많은 변수에 라벨을 적용하기 위해 함수 생성.

back <- function(var) { myQRvars<- menuRecode(data =myQRvars,

                                              variable  =var,

                                              current.value=1,

                                              new.value    =2)

                        myQRvars<- menuRecode(data =myQRvars,

                                              variable     =var,

                                              current.value=5,

                                              new.value    =4)

                        return(myQRvars)}

 

myQRvars<-back(var="qr1")

myQRvars<-back(var="qr2")

myQRvars<-back(var="qr3")

myQRvars<-back(var="qr4")

print(myQRvars)

 qr1 qr2 qr3 qr4

1   2   2   4   2

2   2   2   4   2

3   2   2   4   3

4   3   2  NA   3

5   4   4   2   4

6   4   4   4   4

7   4   3   4   4

8   4   4   4   4

 

# 원 변수와 새 변수 합치기.

mydata <- cbind(mydata,myQRvars)

print(mydata)

workshop  gender q1 q2 q3 q4 qr1 qr2 qr3 qr4

1        1      f  1  1  5  1   2   2   4   2

2        2      f  2  1  4  1   2   2   4   2

3        1      f  2  2  4  3   2   2   4   3

4        2      f  3  1 NA  3   3   2  NA   3

5        1      m  4  5  2  4   4   4   2   4

6        2      m  5  4  5  5   4   4   4   4

7        1      m  5  3  4  4   4   3   4   4

8        2      m  4  5  5  5   4   4   4   4

 

summary(mydata)

workshop   gender          q1             q2             q3      

    Min.:1.0   f:4         Min.:1.00      Min.:1.00      Min.:2.000 

 1st Qu.:1.0   m:4      1st Qu.:2.00   1st Qu.:1.00   1st Qu.:4.000 

  Median:1.5             Median:3.50    Median:2.50    Median:4.000 

    Mean:1.5               Mean:3.25      Mean:2.75      Mean:4.143 

 3rd Qu.:2.0            3rd Qu.:4.25   3rd Qu.:4.25   3rd Qu.:5.000 

    Max.:2.0               Max.:5.00      Max.:5.00      Max.:5.000 

                                                         NA's:1.000 

        q4            qr1             qr2             qr3             qr4

    Min.:1.00      Min.:2.000      Min.:2.000      Min.:2.000      Min.:2.00 

 1st Qu.:2.50   1st Qu.:2.000   1st Qu.:2.000   1st Qu.:4.000   1st Qu.:2.75 

  Median:3.50    Median:3.500    Median:2.500    Median:4.000    Median:3.50 

    Mean:3.25      Mean:3.125      Mean:2.875      Mean:3.714      Mean:3.25 

 3rd Qu.:4.25   3rd Qu.:4.000   3rd Qu.:4.000   3rd Qu.:4.000   3rd Qu.:4.00 

    Max.:5.00      Max.:4.000      Max.:4.000      Max.:4.000      Max.:4.00

                                                   NA's:1.000 

 

 


5. PROC SQL

MAIN

* CASE함수를 이용하여 RECODING;

options linesize=120;

proc sql;

  create table mydata as

    select a.*,

           case q1 when 1 then 2

                   when 5 then 4

           else q1 end as qr1,

           case q2 when 1 then 2

                   when 5 then 4

           else q2 end as qr2,

           case q3 when 1 then 2

                   when 5 then 4

           else q3 end as qr3,

           case q4 when 1 then 2

                   when 5 then 4

           else q4 end as qr4                 

    from   BACK.mydata a;

  select * from mydata;

quit;

id  workshop  gender          q1        q2        q3        q4       qr1       qr2       qr3       qr4

 1         1  f                1         1         5         1         2         2         4         2

 2         2  f                2         1         4         1         2         2         4         2

 3         1  f                2         2         4         3         2         2         4         3

 4         2  f                3         1         .         3         3         2         .         3

 5         1  m                4         5         2         4         4         4         2         4

 6         2  m                5         4         5         5         4         4         4         4

 7         1  m                5         3         4         4         4         3         4         4

 8         2  m                4         5         5         5         4         4         4         4

 

proc sql;

  select min(q1)  as q1_min,

         mean(q1) as q1_mean,

         max(q1)  as q1_max,

         sum(q1)  as q1_sum,

         min(q2)  as q2_min,

         mean(q2) as q2_mean,

         max(q2)  as q2_max,

         sum(q2)  as q2_sum

  from mydata;

quit;

q1_min   q1_mean    q1_max    q1_sum    q2_min   q2_mean    q2_max    q2_sum

----------------------------------------------------------------------------

     1      3.25         5        26         1      2.75         5        22