我试图在某些条件下连接字符串变量。假设以下数据是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_ID
和SHOP
创建一个名为BOUGHT
的新变量,其中包含产品的名称,遵循一些规则。
对于相同的USER_ID
和SHOP
:
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_ID
和SHOP
所购买的产品。然后创建变量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条件需要大量工作。我怎么能这样做?
我认为,只要你有条件,你可能需要在某种程度上使用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_ID
和SHOP
可能出现的所有产品组合。
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
容纳更多的字符。