3

假设我有一个宏变量,它是一个单词列表

%LET myvariable= Avocado Banana Rice Corn Mango Milk Strawberry Banana Banana Lime;

现在,我希望有一个数据集,其中每一行是该列表的一个单词,加上一个 ID 号

ID    Ingredient
1     Avocado
2     Banana
3     Rice
4     Corn
5     Mango
6     Milk
7     Strawberry
8     Banana
9     Banana
10    Lime

我试过这样的事情:

DATA food;
DO id = 1 TO 10;
Ingredient= SCAN(&myvariable.,id,' ');
    OUTPUT;
END;
RUN;

但这产生了一个错误:“错误 388-185:需要算术运算符。”

这似乎是一件微不足道的事情,但不知何故我被卡住了。因此,我们将不胜感激任何帮助。

一些背景:

在我的真实数据集中,这个宏变量是通过 PROC SQL 从一个数据集中创建的,其中每个条目都有几个单词,用空格分隔。像这样的东西:

Product_ID    Ingredients
1             Sugar Milk Vanilla
2             Corn Sugar Banana
3             Apple Banana Maple_Syrup Oats
...           ...
4

2 回答 2

4

很接近。无需评论为什么要这样做,您只需在宏变量名称周围加上双引号:

DATA food;
   DO id = 1 TO 10;
      Ingredient= SCAN("&myvariable.",id,' ');
      OUTPUT;
   END;
RUN;
于 2012-08-29T14:36:25.200 回答
3

不需要宏变量和所有其他东西。您可以直接从数据步执行此操作:

**
** CREATE SOME SAMPLE DATA
*;
data sentences;
  infile datalines truncover;
  input Product_ID    $
        Ingredients   $100.
        ;
datalines;
1 Sugar Milk Vanilla
2 Corn Sugar Banana
3 Apple Banana Maple_Syrup Oats
;
run;


**
** OUTPUT EACH WORD AS A ROW
*;
data words;
  length word $100;
  set sentences;
  retain id 0;

  cnt = 1;
  word = scan(ingredients,cnt);
  do while (word ne '');
    id = id + 1;
    output;
    cnt = cnt + 1;
    word = scan(ingredients,cnt);
  end;

  drop ingredients cnt;

run;
于 2012-08-29T15:02:03.807 回答