基于条件的用户产品的连接

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

我试图在某些条件下连接字符串变量。假设以下数据是ilustrate。

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.

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

spss
1个回答
0
投票

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

假设您有8个产品。我们将像USER_ID一样将它们汇总到SHOP(尽管跳过了创建单个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容纳更多的字符。

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