基于条件的用户产品串联

  • 本文关键字:用户 于条件 条件 spss
  • 更新时间 :
  • 英文 :


我正在尝试根据某些条件连接字符串变量。假设以下数据要说明。

DATA LIST FREE /USER_ID(F2.0) SHOP(A5) PRODUCT(A8).
BEGIN DATA
1 SHOP1 PRODUCT1
1 SHOP1 PRODUCT2
1 SHOP2 PRODUCT1
1 SHOP2 PRODUCT4
2 SHOP1 PRODUCT1
2 SHOP2 PRODUCT2
2 SHOP3 PRODUCT3
END DATA.
AUTORECODE SHOP PRODUCT /INTO COD_SHOP COD_PRODUCT.
DELETE VARIABLES SHOP PRODUCT.
RENAME VARIABLES COD_SHOP = SHOP.
RENAME VARIABLES COD_PRODUCT = PRODUCT.
EXECUTE.

我想做的是对于相同的USER_IDSHOP按照一些规则创建一个名为BOUGHT的新变量,其中包含产品的名称。

对于相同的USER_IDSHOP

PRODUCT1 THEN BOUGHT IS 'PRODUCT1'
IF PRODUCT4 THEN BOUGHT IS 'PRODUCT4'
IF PRODUCT1 AND PRODUCT4 THEN BOUGHT IS 'PRODUCT1 + PRODUCT4'
IF PRODUCT2 OR PRODUCT3 THEN BOUGHT IS 'PRODUCT MIX'.

我尝试了什么

IF (PRODUCT = 1) USER_PRODUCT_1 = 1.
IF (PRODUCT = 2) USER_PRODUCT_2 = 1.
IF (PRODUCT = 3) USER_PRODUCT_3 = 1.
IF (PRODUCT = 4) USER_PRODUCT_4 = 1.
SORT CASES BY USER_ID SHOP.
AGGREGATE
/OUTFILE *
/BREAK = USER_ID SHOP
/PRODUCT1 = MAX(USER_PRODUCT_1)
/PRODUCT2 = MAX(USER_PRODUCT_2)
/PRODUCT3 = MAX(USER_PRODUCT_3)
/PRODUCT4 = MAX(USER_PRODUCT_4)
.

这样,我将知道相同的USER_IDSHOP购买的产品。然后创建变量BOUGHT

STRING BOUGHT(A60).
DO IF (PRODUCT1 = 1). BOUGHT = 'PRODUCT1'
ELSE IF. (PRODUCT4 =1) BOUGHT = 'PRODUCT4'
ELSE IF. (PRODUCT1 = 1 & PRODUCT4 = 1) BOUGHT = 'PRODUCT1 + PRODUCT4'.
ELSE. BOUGHT = 'PRODUCT MIX'
END IF.
EXECUTE.

这只是一个简单的例子。我有更多的产品,其中一些在最终变量 BBUY 中用一些特定名称分组,但其他产品需要连接起来。在这种情况下,使用 IF 条件需要大量工作。我怎么能做到呢?

我认为在某种程度上,你有条件,你可能需要在某种程度上使用IF。在不知道您需要适应的特定"产品"组合的情况下,我将尽最大努力提供一种通用方法。

假设您有 8 个产品。我们将像您一样按级别将它们聚合到USER_IDSHOP(尽管跳过了创建单个 PRODUCT 变量的中间步骤(。

SORT CASES BY USER_ID SHOP.
AGGREGATE
/OUTFILE=*
/PRESORTED
/BREAK = USER_ID SHOP
/PRODUCT1 = CIN(PRODUCT,1,1)
/PRODUCT2 = CIN(PRODUCT,2,2)
/PRODUCT3 = CIN(PRODUCT,3,3)
/PRODUCT4 = CIN(PRODUCT,4,4)
/PRODUCT5 = CIN(PRODUCT,5,5)
/PRODUCT6 = CIN(PRODUCT,6,6)
/PRODUCT7 = CIN(PRODUCT,7,7)
/PRODUCT8 = CIN(PRODUCT,8,8) .

现在,让我们创建变量BOUGHT来跟踪给定USER_IDSHOP可能发生的所有产品组合。

STRING BOUGHT(A100) .
VECTOR PRODUCT = PRODUCT1 TO PRODUCT8 .
LOOP #i=1 TO 8 .
IF (BOUGHT ='' AND PRODUCT(#i)>0) BOUGHT=CONCAT('Product ',#i) .
IF (BOUGHT~='' AND PRODUCT(#i)>0) BOUGHT=CONCAT(BOUGHT,' + Product ',#i) .
END LOOP .
EXE .

要为特定产品组合应用自定义值,您可以使用RECODE。假设您需要产品组合 [2,5] 和 [3,6,8] 的自定义值。

RECODE BOUGHT
('Product 2 + Product 5' = 'Some Product Combo')
('Product 3 + Product 6 + Product 8' = 'Some Other Product Combo') .
EXE .

请记住,如果您有更多产品(和潜在组合(,您将希望允许BOUGHT容纳更多角色。

我认为如果您使用变量将数据重组为案例,您可能会得到更简单的解决方案。

SORT CASES BY USER_ID SHOP PRODUCT.
CASESTOVARS
/ID=USER_ID SHOP
/INDEX=PRODUCT
/GROUPBY=VARIABLE
/VIND ROOT=idx.

请记住,为了做到这一点,id 和 shop 的每个组合在您的数据集中必须是唯一的。

在此组合之后,您的数据将如下所示:

USER_ID SHOP idxPRODUCT1 idxPRODUCT2 idxPRODUCT3 idxPRODUCT4
1       1    1           1           0           0 
1       2    1           0           0           1
2       1    1           0           0           0
2       2    0           1           0           0
2       3    0           0           1           0

我不确定您到底想用"购买"变量做什么。但是,假设您要创建一个字符串变量,该变量连接用户在商店中购买的所有产品。然后,您可以执行以下操作:

STRING bought (A120).
IF (idxproduct1) bought = 'product1'.
IF (idxproduct2) bought = CONCAT(bought, ' + ', 'product2').
IF (idxproduct3) bought = CONCAT(bought, ' + ', 'product3').
IF (idxproduct4) bought = CONCAT(bought, ' + ', 'product4').
...
* Remove any leading ' + '.
IF(CHAR.INDEX(bought, ' + ') = 1) bought = REPLACE(bought, ' + ', '', 1).
EXECUTE.

最新更新