跨行创建指示器



我希望跨行创建一个指标,以查看公司是否销售苹果。例如,给定一个数据帧:

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

我想创建一个 dummyvar 列,用 1 标记所有公司 A,因为约翰在那里卖苹果

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

我想在 sas 或 SQL 中执行此操作。

这在 PROC SQL 中很容易做到,因为 SAS 会自动将详细信息行与摘要统计信息重新合并。 布尔表达式的计算结果为 0/1,因此只需使用 MAX() 来确定表达式是否为真。

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

MS SQL Server:解决方案可能是这样的:

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

假设表的名称为 X,并且 IND 列已经存在空值。

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')

最新更新