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

13. 데이터 프레임 소팅.


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

 


1. SAS

MAIN

* 데이터 소트를 위한 SAS 프로그램.

 

PROC SORT  DATA=BACK.mydata out=mydata;

     BY workshop;

RUN;

PROC PRINT DATA=mydata; RUN;

OBS    id    workshop    gender    q1    q2    q3    q4

 1      1        1         f        1     1     5     1

 2      3        1         f        2     2     4     3

 3      5        1         m        4     5     2     4

 4      7        1         m        5     3     4     4

 5      2        2         f        2     1     4     1

 6      4        2         f        3     1     .     3

 7      6        2         m        5     4     5     5

 8      8        2         m        4     5     5     5

 

PROC SORT  DATA=BACK.mydata out=mydata; 

     BY gender workshop;

RUN;

PROC PRINT DATA=mydata; RUN;

OBS    id    workshop    gender    q1    q2    q3    q4

 1      1        1         f        1     1     5     1

 2      3        1         f        2     2     4     3

 3      2        2         f        2     1     4     1

 4      4        2         f        3     1     .     3

 5      5        1         m        4     5     2     4

 6      7        1         m        5     3     4     4

 7      6        2         m        5     4     5     5

 8      8        2         m        4     5     5     5

 

PROC SORT  DATA=BACK.mydata out=mydata;

     BY workshop descending gender;

RUN;

PROC PRINT DATA=mydata; RUN;

OBS    id    workshop    gender    q1    q2    q3    q4

 1      5        1         m        4     5     2     4

 2      7        1         m        5     3     4     4

 3      1        1         f        1     1     5     1

 4      3        1         f        2     2     4     3

 5      6        2         m        5     4     5     5

 6      8        2         m        4     5     5     5

 7      2        2         f        2     1     4     1

 8      4        2         f        3     1     .     3

 

PROC SORT  DATA=BACK.mydata out=mydata;

     BY descending workshop descending gender;

RUN;

PROC PRINT DATA=mydata; RUN;

OBS    id    workshop    gender    q1    q2    q3    q4

 1      6        2         m        5     4     5     5

 2      8        2         m        4     5     5     5

 3      2        2         f        2     1     4     1

 4      4        2         f        3     1     .     3

 5      5        1         m        4     5     2     4

 6      7        1         m        5     3     4     4

 7      1        1         f        1     1     5     1

 8      3        1         f        2     2     4     3

 

PROC SORT  DATA=BACK.mydata out=mydata ;

     BY workshop gender descending id;

RUN;

 

PROC SORT  DATA=mydata nodupkey;

     BY workshop gender;

RUN;

 

PROC PRINT DATA=mydata; RUN;

OBS    id    workshop    gender    q1    q2    q3    q4

 1      3        1         f        2     2     4     3

 2      7        1         m        5     3     4     4

 3      4        2         f        3     1     .     3

 4      8        2         m        4     5     5     5



2. SPSS

MAIN

 

* SPSS Program to Sort Data.

SORT CASES BY workshop (A).

LIST.

EXECUTE.

SORT CASES BY gender (A) workshop (A).

LIST.

EXECUTE.

SORT CASES BY workshop (D) gender (A).

LIST.

EXECUTE.


3. R-PROJECT

MAIN

 

* 인덱스를 이용한 데이터 프레임 소트

 

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

  sep=",")

print(mydata)

 

# 처음 4개의 관측치를 출력.

print( mydata[ c(1,2,3,4), ] )

id workshop gender q1 q2 q3 q4

1  1        1      f  1  1  5  1

2  2        2      f  2  1  4  1

3  3        1      f  2  2  4  3

4  4        2      f  3  1 NA  3

 

# 인덱스 값을 거꾸로 삽입하여서 역순으로 출력한다.

print( mydata[ c(4,3,2,1), ] )

id workshop gender q1 q2 q3 q4

4  4        2      f  3  1 NA  3

3  3        1      f  2  2  4  3

2  2        2      f  2  1  4  1

1  1        1      f  1  1  5  1

 

# 변수 workshop(1과2)를 기준으로 정렬.

# Order함수는 정렬할 인덱스를 발견한다.

mydataSorted<-mydata[ order(mydata$workshop), ]

print(mydataSorted)

id workshop gender q1 q2 q3 q4

1  1        1      f  1  1  5  1

3  3        1      f  2  2  4  3

5  5        1      m  4  5  2  4

7  7        1      m  5  3  4  4

2  2        2      f  2  1  4  1

4  4        2      f  3  1 NA  3

6  6        2      m  5  4  5  5

8  8        2      m  4  5  5  5

 

# 성별,workshop변수를 기준으로 정렬.

mydataSorted<-mydata[ order( mydata$gender, mydata$workshop ), ]

print(mydataSorted)

id workshop gender q1 q2 q3 q4

1  1        1      f  1  1  5  1

3  3        1      f  2  2  4  3

2  2        2      f  2  1  4  1

4  4        2      f  3  1 NA  3

5  5        1      m  4  5  2  4

7  7        1      m  5  3  4  4

6  6        2      m  5  4  5  5

8  8        2      m  4  5  5  5

 

# 기본 소트 순서는 올림차순이다. 변수 앞에 음수(-)를 넣으면 내림차순으로 정렬한다.

mydataSorted<- mydata[ order( -mydata$workshop,mydata$gender ), ]

print(mydataSorted)

id workshop gender q1 q2 q3 q4

2  2        2      f  2  1  4  1

4  4        2      f  3  1 NA  3

6  6        2      m  5  4  5  5

8  8        2      m  4  5  5  5

1  1        1      f  1  1  5  1

3  3        1      f  2  2  4  3

5  5        1      m  4  5  2  4

7  7        1      m  5  3  4  4

 

# 음수 대신에 REV함수를 사용하여서 내림차순으로 정렬할수 있다.

mydataSorted<- mydata[ order( mydata$workshop,rev(mydata$gender) ), ]

print(mydataSorted)

id workshop gender q1 q2 q3 q4

5  5        1      m  4  5  2  4

7  7        1      m  5  3  4  4

1  1        1      f  1  1  5  1

3  3        1      f  2  2  4  3

6  6        2      m  5  4  5  5

8  8        2      m  4  5  5  5

2  2        2      f  2  1  4  1

4  4        2      f  3  1 NA  3

 

mydataSorted<- mydata[ order( rev(mydata$workshop),rev(mydata$gender) ), ]

print(mydataSorted)

 

mydataSorted<- mydata[ order( -mydata$workshop,rev(mydata$gender) ), ]

print(mydataSorted)

workshop gender q1 q2 q3 q4

6        2      m  5  4  5  5

8        2      m  4  5  5  5

2        2      f  2  1  4  1

4        2      f  3  1 NA  3

5        1      m  4  5  2  4

7        1      m  5  3  4  4

1        1      f  1  1  5  1

3        1      f  2  2  4  3

 

* 데이터 중복 제거 하기;

mydataSorted<- mydata[ order( mydata$workshop,

mydata$gender,-mydata$id ), ]

print(mydataSorted)

id workshop gender q1 q2 q3 q4

3  3        1      f  2  2  4  3

1  1        1      f  1  1  5  1

7  7        1      m  5  3  4  4

5  5        1      m  4  5  2  4

4  4        2      f  3  1 NA  3

2  2        2      f  2  1  4  1

8  8        2      m  4  5  5  5

6  6        2      m  5  4  5  5

 

* 소트된 데이터의 결과를 가지고 중복 데이터 제거;

mydataSorted[!duplicated(mydataSorted[,2:3]),]

id workshop gender q1 q2 q3 q4

3  3        1      f  2  2  4  3

7  7        1      m  5  3  4  4

4  4        2      f  3  1 NA  3

8  8        2      m  4  5  5  5

 

 


4. S-PLUS

MAIN

 

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

  sep=",")

print(mydata)

 

# 처음 4개의 관측치를 출력.

print( mydata[ c(1,2,3,4), ] )

id workshop gender q1 q2 q3 q4

1  1        1      f  1  1  5  1

2  2        2      f  2  1  4  1

3  3        1      f  2  2  4  3

4  4        2      f  3  1 NA  3

 

# 인덱스 값을 거꾸로 삽입하여서 역순으로 출력한다.

print( mydata[ c(4,3,2,1), ] )

id workshop gender q1 q2 q3 q4

4  4        2      f  3  1 NA  3

3  3        1      f  2  2  4  3

2  2        2      f  2  1  4  1

1  1        1      f  1  1  5  1

 

# 변수 workshop(1과2)를 기준으로 정렬.

# Order함수는 정렬할 인덱스를 발견한다.

mydataSorted<-mydata[ order(mydata$workshop), ]

print(mydataSorted)

id workshop gender q1 q2 q3 q4

1  1        1      f  1  1  5  1

3  3        1      f  2  2  4  3

5  5        1      m  4  5  2  4

7  7        1      m  5  3  4  4

2  2        2      f  2  1  4  1

4  4        2      f  3  1 NA  3

6  6        2      m  5  4  5  5

8  8        2      m  4  5  5  5

 

# 성별,workshop변수를 기준으로 정렬.

mydataSorted<-mydata[ order( mydata$gender, mydata$workshop ), ]

print(mydataSorted)

id workshop gender q1 q2 q3 q4

1  1        1      f  1  1  5  1

3  3        1      f  2  2  4  3

2  2        2      f  2  1  4  1

4  4        2      f  3  1 NA  3

5  5        1      m  4  5  2  4

7  7        1      m  5  3  4  4

6  6        2      m  5  4  5  5

8  8        2      m  4  5  5  5

 

# 기본 소트 순서는 올림차순이다. 변수 앞에 음수(-)를 넣으면 내림차순으로 정렬한다.

mydataSorted<- mydata[ order( -mydata$workshop,mydata$gender ), ]

print(mydataSorted)

id workshop gender q1 q2 q3 q4

2  2        2      f  2  1  4  1

4  4        2      f  3  1 NA  3

6  6        2      m  5  4  5  5

8  8        2      m  4  5  5  5

1  1        1      f  1  1  5  1

3  3        1      f  2  2  4  3

5  5        1      m  4  5  2  4

7  7        1      m  5  3  4  4

 

# 음수 대신에 REV함수를 사용하여서 내림차순으로 정렬할수 있다.

mydataSorted<- mydata[ order( mydata$workshop,rev(mydata$gender) ), ]

print(mydataSorted)

id workshop gender q1 q2 q3 q4

5  5        1      m  4  5  2  4

7  7        1      m  5  3  4  4

1  1        1      f  1  1  5  1

3  3        1      f  2  2  4  3

6  6        2      m  5  4  5  5

8  8        2      m  4  5  5  5

2  2        2      f  2  1  4  1

4  4        2      f  3  1 NA  3

 

mydataSorted<- mydata[ order( rev(mydata$workshop),rev(mydata$gender) ), ]

print(mydataSorted)

 

mydataSorted<- mydata[ order( -mydata$workshop,rev(mydata$gender) ), ]

print(mydataSorted)

id workshop gender q1 q2 q3 q4

6  6        2      m  5  4  5  5

8  8        2      m  4  5  5  5

2  2        2      f  2  1  4  1

4  4        2      f  3  1 NA  3

5  5        1      m  4  5  2  4

7  7        1      m  5  3  4  4

1  1        1      f  1  1  5  1

3  3        1      f  2  2  4  3

 

* 데이터 중복 제거 하기;

mydataSorted<- mydata[ order( mydata$workshop,

mydata$gender,-mydata$id ), ]

print(mydataSorted)

id workshop gender q1 q2 q3 q4

3  3        1      f  2  2  4  3

1  1        1      f  1  1  5  1

7  7        1      m  5  3  4  4

5  5        1      m  4  5  2  4

4  4        2      f  3  1 NA  3

2  2        2      f  2  1  4  1

8  8        2      m  4  5  5  5

6  6        2      m  5  4  5  5

 

* 소트된 데이터의 결과를 가지고 중복 데이터 제거;

mydataSorted[!duplicated(mydataSorted[,2:3]),]

id workshop gender q1 q2 q3 q4

3  3        1      f  2  2  4  3

7  7        1      m  5  3  4  4

4  4        2      f  3  1 NA  3

8  8        2      m  4  5  5  5

 

 


5. PROC SQL

MAIN

 

* Order by 구분을 이용하여 데이터 소트;

proc sql;

  select *

  from   BACK.mydata

  order by workshop;

quit;

id  workshop  gender          q1        q2        q3        q4

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

 3         1  f                2         2         4         3

 5         1  m                4         5         2         4

 7         1  m                5         3         4         4

 1         1  f                1         1         5         1

 6         2  m                5         4         5         5

 2         2  f                2         1         4         1

 4         2  f                3         1         .         3

 8         2  m                4         5         5         5

 

proc sql;

  select *

  from   BACK.mydata

  order by workshop,gender;

quit;

id  workshop  gender          q1        q2        q3        q4

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

 3         1  f                2         2         4         3

 1         1  f                1         1         5         1

 7         1  m                5         3         4         4

 5         1  m                4         5         2         4

 2         2  f                2         1         4         1

 4         2  f                3         1         .         3

 6         2  m                5         4         5         5

 8         2  m                4         5         5         5

 

* Descending를 이용하여 내림차순 소트;

proc sql;

  select *

  from   BACK.mydata

  order by workshop,gender descending;

quit;

id  workshop  gender          q1        q2        q3        q4

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

 5         1  m                4         5         2         4

 7         1  m                5         3         4         4

 3         1  f                2         2         4         3

 1         1  f                1         1         5         1

 6         2  m                5         4         5         5

 8         2  m                4         5         5         5

 2         2  f                2         1         4         1

 4         2  f                3         1         .         3

 

proc sql;

  select *

  from   BACK.mydata

  order by workshop descending,gender descending;

quit;

id  workshop  gender          q1        q2        q3        q4

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

 6         2  m                5         4         5         5

 8         2  m                4         5         5         5

 2         2  f                2         1         4         1

 4         2  f                3         1         .         3

 7         1  m                5         3         4         4

 5         1  m                4         5         2         4

 1         1  f                1         1         5         1

 3         1  f                2         2         4         3

 

* 위에서 소트된 데이터 세트에서 Sub-query를 이용하여 중복된 데이터 제거;

proc sql;

  select a.*

  from   BACK.mydata a

  where  id = ( select max(id)

                from   BACK.mydata b

                where  a.workshop = b.workshop

                and    a.gender   = b.gender);

quit;

id  workshop  gender          q1        q2        q3        q4

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

 3         1  f                2         2         4         3

 4         2  f                3         1         .         3

 7         1  m                5         3         4         4

 8         2  m                4         5         5         5