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

2. 조건문에 의한 변환.


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

 


1. SAS

MAIN

* 조건문을 사용하여서 변수 생성;

* ifn 함수 참조 : http://www.statwith.pe.kr/SAS/1.FUNCTION/F0203.htm

DATA mydata;

 SET BACk.mydata;

     If q4= 5 then x1=1;

     else x1=0;

     * if함수의 간단한 함수;

     x11 = ifn(q4=5,1,0);

 

     If q4>=4 then x2=1;

     else x2=0;

     x22 = ifn(q4>=4,1,0);

 

     If workshop=1 & q4>=5 then x3=1;

     else x3=0;

     x33 = ifn(workshop=1 and q4>=5,1,0);

 

     If gender="f" then scoreA=2*q1+q2;

     Else scoreA=3*q1+q2;

     scoreAA = ifn(gender='f',2*q1+q2,3*q1+q2);

 

     If workshop=1 and q4>=5 then scoreB=2*q1+q2;

     Else scoreB=3*q1+q2;

     scoreBB = ifn(workshop=1 and q4>=5,2*q1+q2,3*q1+q2);

run;

proc print;run;

score    score    score    score

 q1    q2    q3    q4    x1    x11    x2    x22    x3    x33       A        AA       B        BB

  1     1     5     1     0     0      0     0      0     0        3        3        4        4

  2     1     4     1     0     0      0     0      0     0        5        5        7        7

  2     2     4     3     0     0      0     0      0     0        6        6        8        8

  3     1     .     3     0     0      0     0      0     0        7        7       10       10

  4     5     2     4     0     0      1     1      0     0       17       17       17       17

  5     4     5     5     1     1      1     1      0     0       19       19       19       19

  5     3     4     4     0     0      1     1      0     0       18       18       18       18

  4     5     5     5     1     1      1     1      0     0       17       17       17       17



2. SPSS

MAIN

GET FILE=("c:\data\mydata.sav")

COMPUTE X1=0.

IF (q4 EQ 5 ) X1=1.

 

COMPUTE X2=0.

IF (q4 GE 4) X2=1.

 

COMPUTE X3=0.

IF (gender EQ 'f' AND Q4 GE 5) X3=1.

 

COMPUTE scoreA=3*q1+q2.

IF (gender='f') scoreA=2*q1+q2.

 

COMPUTE scoreB=3*q1+q2.

IF (workshop EQ 1 AND q4 GE 5) scoreB=2*q1+q2.

EXECUTE.

 


3. R-PROJECT

MAIN

* 조건문에 의한 변환을 위한 R-Project

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

print(mydata)

attach(mydata) # mydata를 기본 데이터 세트로 지정.

 

# 0과 1의 이진 변수 생성.

# 새로운 변수 q4SAgree는 만약 q4가 5라면 1의 값을 그 외에는 0의 값을 넣는다.

# 문제 4를 맞힌 사람을 알수 있다.

mydata$q4Sagree <- ifelse( q4 == 5, 1,0 )

print(mydata)

workshop gender q1 q2 q3 q4 q4Sagree

1        1      f  1  1  5  1        0

2        2      f  2  1  4  1        0

3        1      f  2  2  4  3        0

4        2      f  3  1 NA  3        0

5        1      m  4  5  2  4        0

6        2      m  5  4  5  5        1

7        1      m  5  3  4  4        0

8        2      m  4  5  5  5        1

 

# q4가 4 이상인 경우 1을 할당.

mydata$q4agree <- ifelse( q4 >= 4, 1,0)

print(mydata)

workshop gender q1 q2 q3 q4 q4Sagree q4agree

1        1      f  1  1  5  1        0       0

2        2      f  2  1  4  1        0       0

3        1      f  2  2  4  3        0       0

4        2      f  3  1 NA  3        0       0

5        1      m  4  5  2  4        0       1

6        2      m  5  4  5  5        1       1

7        1      m  5  3  4  4        0       1

8        2      m  4  5  5  5        1       1

 

# 좀더 복잡한 로직 예제.

# workshop이 1 이고, q4가 4인 이상인 변수에 1을 할당.

mydata$workshop1agree <- ifelse( (workshop == 1 & q4 >=4 ) , 1,0)

print(mydata)

workshop gender q1 q2 q3 q4 q4Sagree q4agree workshop1agree

1        1      f  1  1  5  1        0       0              0

2        2      f  2  1  4  1        0       0              0

3        1      f  2  2  4  3        0       0              0

4        2      f  3  1 NA  3        0       0              0

5        1      m  4  5  2  4        0       1              1

6        2      m  5  4  5  5        1       1              0

7        1      m  5  3  4  4        0       1              1

8        2      m  4  5  5  5        1       1              0

 

# 조건문에 의한 변화는 남성과 여성에 대해 다른 변환을 적용할수 있다.

# 남성이 참이면, 여성은 거짓이다. 

mydata$score <- ifelse( gender=="f" ,

   (mydata$score <- (2*q1)+q2),  # 여성에 대하여.

   (mydata$score <- (3*q1)+q2) ) # 남성에 대하여.

mydata

  workshop gender q1 q2 q3 q4 q4Sagree q4agree workshop1agree score

1        1      f  1  1  5  1        0       0              0     3

2        2      f  2  1  4  1        0       0              0     5

3        1      f  2  2  4  3        0       0              0     6

4        2      f  3  1 NA  3        0       0              0     7

5        1      m  4  5  2  4        0       1              1    17

6        2      m  5  4  5  5        1       1              0    19

7        1      m  5  3  4  4        0       1              1    18

8        2      m  4  5  5  5        1       1              0    17

 

# 남성과 여성에 대하여 다른 공식을 할당.

# 성별이 결측치 인경우 , 결과 역시 NA로 할당.

mydata$score <- ifelse( gender=="f" ,

   (mydata$score1 <- 2*q1+q2),

    ifelse( mydata$gender=="m",

     (mydata$score <- 3*q1+q2), NA )

 )

print(mydata)

  workshop gender q1 q2 q3 q4 q4Sagree q4agree workshop1agree score

1        1      f  1  1  5  1        0       0              0     3

2        2      f  2  1  4  1        0       0              0     5

3        1      f  2  2  4  3        0       0              0     6

4        2      f  3  1 NA  3        0       0              0     7

5        1      m  4  5  2  4        0       1              1    17

6        2      m  5  4  5  5        1       1              0    19

7        1      m  5  3  4  4        0       1              1    18

8        2      m  4  5  5  5        1       1              0    17

 

# 괄혼안에서 더 복잡한 로직을 이용한 조건문 공식.

# 만약 workshop 이나 q4가 결측치이면, 두번째 공신을 적용.

mydata$score2 <- ifelse( (workshop==1 & q4>=4) ,

   (mydata$score <- 2*q1+q2),

    (mydata$score <- 3*q1+q2) )

print(mydata)

  workshop gender q1 q2 q3 q4 q4Sagree q4agree workshop1agree score score2

1        1      f  1  1  5  1        0       0              0     4      4

2        2      f  2  1  4  1        0       0              0     7      7

3        1      f  2  2  4  3        0       0              0     8      8

4        2      f  3  1 NA  3        0       0              0    10     10

5        1      m  4  5  2  4        0       1              1    17     13

6        2      m  5  4  5  5        1       1              0    19     19

7        1      m  5  3  4  4        0       1              1    18     13

8        2      m  4  5  5  5        1       1              0    17     17


detach(mydata)

 


4. S-PLUS

MAIN

 

# 0과 1의 이ㅣ진 변수 생성.

# 새로운 변수 q4SAgree는 만약 q4가 5라면 1의 값을 그 외에는 0의 값을 넣는다.

# 문제 4를 맞힌 사람을 알수 있다.

mydata$q4Sagree <- ifelse( q4 == 5, 1,0 )

print(mydata)

workshop gender q1 q2 q3 q4 q4Sagree

1        1      f  1  1  5  1        0

2        2      f  2  1  4  1        0

3        1      f  2  2  4  3        0

4        2      f  3  1 NA  3        0

5        1      m  4  5  2  4        0

6        2      m  5  4  5  5        1

7        1      m  5  3  4  4        0

8        2      m  4  5  5  5        1

 

# q4가 4 이상인 경우 1을 할당.

mydata$q4agree <- ifelse( q4 >= 4, 1,0)

print(mydata)

workshop gender q1 q2 q3 q4 q4Sagree q4agree

1        1      f  1  1  5  1        0       0

2        2      f  2  1  4  1        0       0

3        1      f  2  2  4  3        0       0

4        2      f  3  1 NA  3        0       0

5        1      m  4  5  2  4        0       1

6        2      m  5  4  5  5        1       1

7        1      m  5  3  4  4        0       1

8        2      m  4  5  5  5        1       1

 

# 좀더 복잡한 로직 예제.

# workshop이 1 이고, q4가 4인 이상인 변수에 1을 할당.

mydata$workshop1agree <- ifelse( (workshop == 1 & q4 >=4 ) , 1,0)

print(mydata)

workshop gender q1 q2 q3 q4 q4Sagree q4agree workshop1agree

1        1      f  1  1  5  1        0       0              0

2        2      f  2  1  4  1        0       0              0

3        1      f  2  2  4  3        0       0              0

4        2      f  3  1 NA  3        0       0              0

5        1      m  4  5  2  4        0       1              1

6        2      m  5  4  5  5        1       1              0

7        1      m  5  3  4  4        0       1              1

8        2      m  4  5  5  5        1       1              0

 

# 조건문에 의한 변화는 남성과 여성에 대해 다른 변환을 적용할수 있다.

# 남성이 참이면, 여성은 거짓이다. 

mydata$score <- ifelse( gender=="f" ,

                 (mydata$score <- (2*q1)+q2),  #여성에대하여.

                 (mydata$score <- (3*q1)+q2) ) #남성에대하여.

mydata

  workshop gender q1 q2 q3 q4 q4Sagree q4agree workshop1agree score

1        1      f  1  1  5  1        0       0              0     3

2        2      f  2  1  4  1        0       0              0     5

3        1      f  2  2  4  3        0       0              0     6

4        2      f  3  1 NA  3        0       0              0     7

5        1      m  4  5  2  4        0       1              1    17

6        2      m  5  4  5  5        1       1              0    19

7        1      m  5  3  4  4        0       1              1    18

8        2      m  4  5  5  5        1       1              0    17

 

# 남성과 여성에 대하여 다른 공식을 할당.

# 성별이 결측치 인경우 , 결과 역시 NA로 할당.

mydata$score <- ifelse( gender=="f" ,

   (mydata$score1 <- 2*q1+q2),

   ifelse( mydata$gender=="m",

      (mydata$score <- 3*q1+q2), NA )

   )

print(mydata)

  workshop gender q1 q2 q3 q4 q4Sagree q4agree workshop1agree score

1        1      f  1  1  5  1        0       0              0     3

2        2      f  2  1  4  1        0       0              0     5

3        1      f  2  2  4  3        0       0              0     6

4        2      f  3  1 NA  3        0       0              0     7

5        1      m  4  5  2  4        0       1              1    17

6        2      m  5  4  5  5        1       1              0    19

7        1      m  5  3  4  4        0       1              1    18

8        2      m  4  5  5  5        1       1              0    17

 

# 괄혼안에서 더 복잡한 로직을 이용한 조건문 공식.

# 만약 workshop 이나 q4가 결측치이면, 두번째 공신을 적용.

mydata$score2 <- ifelse( (workshop==1 & q4>=4) ,

   (mydata$score <- 2*q1+q2),

   (mydata$score <- 3*q1+q2) )

print(mydata)

  workshop gender q1 q2 q3 q4 q4Sagree q4agree workshop1agree score score2

1        1      f  1  1  5  1        0       0              0     4      4

2        2      f  2  1  4  1        0       0              0     7      7

3        1      f  2  2  4  3        0       0              0     8      8

4        2      f  3  1 NA  3        0       0              0    10     10

5        1      m  4  5  2  4        0       1              1    17     13

6        2      m  5  4  5  5        1       1              0    19     19

7        1      m  5  3  4  4        0       1              1    18     13

8        2      m  4  5  5  5        1       1              0    17     17

 

 


5. PROC SQL

MAIN

 

options ls=150;

proc sql;

  select case when q4=5 then 1 else 0 end as x1,

         ifn(q4=5,1,0) as x11,

         case when q4>=4 then 1 else 0 end as x2,

         ifn(q4>=4,1,0) as x22,

         case when workshop=1 and q4>=5 then 1 else 0 end as x3,

         ifn(workshop=1 and q4>=5,1,0) as x33,

         case when gender='f' then 2*q1+q2 else 3*q1+q2 end as scoreA,

         ifn(gender='f',2*q1+q2,3*q1+q2) as scoreAA,

         case when workshop=1 and q4>=5 then 2*q1+q2 else 3*q1+q2 end as scoreB,

         ifn(workshop=1 and q4>=5,2*q1+q2,3*q1+q2) as scoreBB

  from BACK.mydata;

quit;

x1       x11        x2       x22        x3       x33    scoreA   scoreAA    scoreB   scoreBB

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

  0         0         0         0         0         0         3         3         4         4

  0         0         0         0         0         0         5         5         7         7

  0         0         0         0         0         0         6         6         8         8

  0         0         0         0         0         0         7         7        10        10

  0         0         1         1         0         0        17        17        17        17

  1         1         1         1         0         0        19        19        19        19

  0         0         1         1         0         0        18        18        18        18

  1         1         1         1         0         0        17        17        17        17