2017-11-01 1 views
-1

회사에서 사과를 판매하는지 확인하기 위해 행 전체에 표시기를 만들려고합니다.행에서 표시 만들기

Company | Product | Salesperson  
A   Apple  John 
A   Banana  John 
A   Orange  Jane 
B   Orange  John 
B   Banana  Sam 

내가 요한은 내가이 작업을 수행하고자하는이

Company | Product | Salesperson | IND 
A   Apple  John    1 
A   Banana  John    1 
A   Orange  Jane    1 
B   Orange  John    0 

을 사과를 판매하고 있기 때문에 1 기업 A의 모든 표시하는 dummyvar 열을 만들고 싶습니다 : 예를 들어, dataframe을 부여 sas 또는 SQL.

+0

왜 결과 집합에서 하나의 행을 제거 했습니까? – Tom

답변

0

MS SQL 서버 : 해결책이 될 수있다 : 그 테이블을 가정

declare @tbl as table (
    company varchar(1) 
    ,product varchar(10) 
    ,salesPerson varchar(10) 
) 

insert into @tbl values ('A', 'Apple', 'John') 
insert into @tbl values ('A', 'Banana', 'John') 
insert into @tbl values ('A', 'Orange', 'Jane') 
insert into @tbl values ('B', 'Orange', 'John') 
insert into @tbl values ('B', 'Banana', 'Sam') 

SELECT 
    company 
    ,product 
    ,salesPerson 
    ,CASE WHEN 
     company IN (SELECT company FROM @tbl WHERE product = 'Apple' AND salesPerson = 'John') THEN 1 
     ELSE 0 
    END AS col 
FROM @tbl 
0

이름은 X 및 IND 열이 이미 null 값으로 존재입니다.

update X 
    SET IND = 1 
    WHERE Company IN (select distinct(Company) from X where Product = 'Apple' AND Salesperson = 'John') 

update X 
    SET IND = 0 
    WHERE Company NOT IN (select distinct(Company) from X where Product = 'Apple' AND Salesperson = 'John') 
4

SAS는 요약 통계로 세부 행을 자동으로 다시 만들기 때문에 PROC SQL에서 쉽게 수행 할 수 있습니다. 부울 표현식은 0/1로 평가되므로 표현식이 참인지 알아보기 위해 MAX()를 사용하십시오.

proc sql ; 
create table want as 
    select *,max(product='Apple') as IND 
    from have 
    group by company 
; 
quit; 
+0

@Tom! 감사합니다. 그러나 나는 dummyvar도 만들고 싶었다. 내가 한 일은 결국 테이블 만들기 apple_table을 으로 선택 제품이 'Apple'인 제품을 선택하십시오. 그렇다면 최종 데이터 테이블에 원래 테이블에 다시 연결해야합니다. 0이므로 A는 모두 1이고 B는 그렇지 않습니다. (필자는 John이 여전히 사과를 파는 경우 B를 위해 일하면서 회사를 통해 John을 방문 할 수 있기를 바랍니다. – ASavage

+0

@ASavage이 주석에서 무엇을 묻는 지 확신 할 수 없습니다. 코드 이 대답은 모든 데이터를 선택하고 참 또는 거짓 중 하나 인 IND라는 새로운 하나를 추가합니다. 이는 1 또는 0입니다. COMPANY로 그룹화하면 COMPANY의 동일한 값에 대해 새 열의 값이 일정하게됩니다. – Tom

+0

If 사과가 John에 의해 판매되고 그 조건을 MAX() 집계 함수 내부의 논리 표현식에 추가해야합니다. – Tom

관련 문제