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

4. 다중 조건에 의한 변환.


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

 


1. SAS

MAIN

* 다중 조건에 의한 변환을 위한 SAS 프로그램

* 성별에 따른 스코어1,스코어2 변수를 생성;

DATA mydata;

 SET  BACK.mydata;

      IF gender="m" THEN DO;

         score1 = (1.1*q1)+q2;

         score2 = (1.2*q1)+q2;

      END;

      ELSE IF gender="f" THEN DO;

         score1 = (2.1*q1)+q2;

         score2 = (2.2*q1)+q2;

      END;

RUN;

proc print;run;

id    workshop    gender    q1    q2    q3    q4    score1    score2

 1        1         f        1     1     5     1      3.1       3.2

 2        2         f        2     1     4     1      5.2       5.4

 3        1         f        2     2     4     3      6.2       6.4

 4        2         f        3     1     .     3      7.3       7.6

 5        1         m        4     5     2     4      9.4       9.8

 6        2         m        5     4     5     5      9.5      10.0

 7        1         m        5     3     4     4      8.5       9.0

 8        2         m        4     5     5     5      9.4       9.8



2. SPSS

MAIN

 

DO IF (gender EQ 'm').

+  COMPUTE score1 = (2*q1)+q2.

+  COMPUTE score2 = (3*q1)+q2.

ELSE IF (gender EQ 'f').

+  COMPUTE  score1 = (20*q1)+q2.

+  COMPUTE  score2 = (30*q1)+q2.

END IF.

EXECUTE.

 


3. R-PROJECT

MAIN

 

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

print(mydata)

 

# mydata에 두개의 새로운 칼럼을 추가 하기 위하여 column bind를 이용.

mydata <- cbind(mydata, score1 = 0, score2 = 0)

attach(mydata)

mydata$guys <- gender=="m" # 남성에 대하여 논리 벡터 생성.

mydata$gals <- gender=="f" # 여성에 대하여 논리 벡터 생성.

print(mydata)

workshop gender q1 q2 q3 q4 score1 score2  guys  gals

1        1      f  1  1  5  1      0      0   FALSE  TRUE

2        2      f  2  1  4  1      0      0   FALSE  TRUE

3        1      f  2  2  4  3      0      0   FALSE  TRUE

4        2      f  3  1 NA  3      0      0   FALSE  TRUE

5        1      m  4  5  2  4      0      0   TRUE   FALSE

6        2      m  5  4  5  5      0      0   TRUE   FALSE

7        1      m  5  3  4  4      0      0   TRUE   FALSE

8        2      m  4  5  5  5      0      0   TRUE   FALSE

 

# 로직에 의해 선택된 그룹에 기본 공식 적용.

mydata$score1[gals]<- 2*q1[gals] + q2[gals]

mydata$score2[gals]<- 3*q1[gals] + q2[gals]

mydata$score1[guys]<-20*q1[guys] + q2[guys]

mydata$score2[guys]<-30*q1[guys] + q2[guys]

print(mydata)

workshop gender q1 q2 q3 q4 score1 score2  guys  gals

1        1      f  1  1  5  1      3      4 FALSE  TRUE

2        2      f  2  1  4  1      5      7 FALSE  TRUE

3        1      f  2  2  4  3      6      8 FALSE  TRUE

4        2      f  3  1 NA  3      7     10 FALSE  TRUE

5        1      m  4  5  2  4     85    125  TRUE FALSE

6        2      m  5  4  5  5    104    154  TRUE FALSE

7        1      m  5  3  4  4    103    153  TRUE FALSE

8        2      m  4  5  5  5     85    125  TRUE FALSE

 

* IFELSE함수를 사용하여 위 로직 적용.

mydata$score1<-ifelse(mydata$gals,

                      2*q1*mydata$gals  + q2*mydata$gals,

                      20*q1*mydata$guys + q2*mydata$guys)

mydata$score2<-ifelse(mydata$gals,

                      3*q1*mydata$gals  + q2*mydata$gals,

                      30*q1*mydata$guys + q2*mydata$guys)

  workshop gender q1 q2 q3 q4 score1 score2 guys gals

1        1      f  1  1  5  1      3      4    F    T

2        2      f  2  1  4  1      5      7    F    T

3        1      f  2  2  4  3      6      8    F    T

4        2      f  3  1 NA  3      7     10    F    T

5        1      m  4  5  2  4     85    125    T    F

6        2      m  5  4  5  5    104    154    T    F

7        1      m  5  3  4  4    103    153    T    F

8        2      m  4  5  5  5     85    125    T    F

 

# NULL값을 이용하여 guys와 gals변수를 삭제.

mydata$gals <- mydata$guys <- NULL

print(mydata)

  workshop gender q1 q2 q3 q4 score1 score2

1        1      f  1  1  5  1      3      4

2        2      f  2  1  4  1      5      7

3        1      f  2  2  4  3      6      8

4        2      f  3  1 NA  3      7     10

5        1      m  4  5  2  4     85    125

6        2      m  5  4  5  5    104    154

7        1      m  5  3  4  4    103    153

8        2      m  4  5  5  5     85    125

 

 


4. S-PLUS

MAIN

 

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

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

print(mydata)

 

# mydata에 두개의 새로운 칼럼을 추가 하기 위하여 column bind를 이용.

mydata <- cbind(mydata, score1 = 0, score2 = 0)

 

mydata$guys <- gender=="m" # 남성에 대한 논리벡터 생성.

mydata$gals <- gender=="f" # 여성에 대한 논리벡터 생성.

print(mydata)

  workshop gender q1 q2 q3 q4 score1 score2 guys gals

1        1      f  1  1  5  1      0      0    F    T

2        2      f  2  1  4  1      0      0    F    T

3        1      f  2  2  4  3      0      0    F    T

4        2      f  3  1 NA  3      0      0    F    T

5        1      m  4  5  2  4      0      0    T    F

6        2      m  5  4  5  5      0      0    T    F

7        1      m  5  3  4  4      0      0    T    F

8        2      m  4  5  5  5      0      0    T    F

 

# 로직에 의해 선택된 그룹에 기본 공식 적용.

mydata$score1[mydata$gals]<- 2*q1[mydata$gals] + q2[mydata$gals]

mydata$score2[mydata$gals]<- 3*q1[mydata$gals] + q2[mydata$gals]

mydata$score1[mydata$guys]<-20*q1[mydata$guys] + q2[mydata$guys]

mydata$score2[mydata$guys]<-30*q1[mydata$guys] + q2[mydata$guys]

  workshop gender q1 q2 q3 q4 score1 score2 guys gals

1        1      f  1  1  5  1      3      4    F    T

2        2      f  2  1  4  1      5      7    F    T

3        1      f  2  2  4  3      6      8    F    T

4        2      f  3  1 NA  3      7     10    F    T

5        1      m  4  5  2  4     85    125    T    F

6        2      m  5  4  5  5    104    154    T    F

7        1      m  5  3  4  4    103    153    T    F

8        2      m  4  5  5  5     85    125    T    F

 

# guys와 gals변수를 삭제.

mydata$gals <- mydata$guys <- NULL

print(mydata)

  workshop gender q1 q2 q3 q4 score1 score2

1        1      f  1  1  5  1      3      4

2        2      f  2  1  4  1      5      7

3        1      f  2  2  4  3      6      8

4        2      f  3  1 NA  3      7     10

5        1      m  4  5  2  4     85    125

6        2      m  5  4  5  5    104    154

7        1      m  5  3  4  4    103    153

8        2      m  4  5  5  5     85    125

 


5. PROC SQL

MAIN


* case when문을 통하여 IF문을 대체한다. 단, 복합 조건에 대한 적용은 불가.

proc sql;

  select id,

         workshop,gender,q1,q2,q3,q4,

         case when gender='m' then (20*q1)+q2

         else (2*q1)+q2 end "score1",

         case when gender='m' then (30*q1)+q2

         else (3*q1)+q2 end "score2"

  from   back.mydata;

quit;

id  workshop  gender          q1        q2        q3        q4    score1    score2

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

 1         1  f                1         1         5         1         3         4

 2         2  f                2         1         4         1         5         7

 3         1  f                2         2         4         3         6         8

 4         2  f                3         1         .         3         7        10

 5         1  m                4         5         2         4        85       125

 6         2  m                5         4         5         5       104       154

 7         1  m                5         3         4         4       103       153

 8         2  m                4         5         5         5        85       125