针对给定场景确定 SAS 数据步骤

问题描述 投票:0回答:1

以下给定场景需要 SAS Datastep:

场景一:

SAS datastep 用于识别未下订单的客户列表。

场景2:

SAS datastep 用于获取客户表中每个客户下的订单总数。

下面是我尝试过的场景 1 的 SAS 数据步骤,但还有其他方法吗:

  `data dummy;
   merge order_newcustomer_table;
   by CustomerID;
   if OrderID=missing;
    run;`

对于场景2,你能建议一些更好的方法吗?

表格如下:

CustomerID  CustomerName ContactName Country 
1            Alfred     Maria         Germany 
2         Ana Trujillo  Ana           Mexico 
3          Antonio      Antonio     Mexico 


OrderID     CustomerID           EmployeeID 
1               3                      2 
2               2                      1 
3               2                      3 
sas
1个回答
0
投票

合并前确保数据集按 CustomerID 排序。合并时使用自动 in= 标志变量来测试其中一个数据集是否没有匹配值。

标志变量具有值

  • 0=false(数据集中没有记录与组值匹配)
  • 1=true(数据集中有一条按组值匹配的记录)

示例(使用 DOW 循环技术重做):

data customers;
  do customerId = 1 to 11;
    output;
  end;
run;

data orders;
  call streaminit(20231114);
  do orderId = 1 to 100;
    customerId = rand('integer', 10);
    amount = rand('integer', 100);
    output;
  end;
run;

proc sort data=customers; by customerId;
proc sort data=orders; by customerId;
run;

data want;
  length customerId 8;
  orderCount = 0;
  totalAmt = 0;
  do until (last.customerId);
    merge customers orders(in=orderFlag);
    by customerid;
    orderCount + orderFlag;
    totalAmt + amount;
  end;
  keep customerId orderCount totalAmt;
run;

您将得到以下数据集的输出。不需要多个数据集。 orderCount = 0 是没有订单的客户。

© www.soinside.com 2019 - 2024. All rights reserved.