Supose我有一个宏变量,这是一个单词列表
%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;
但是这产生了一个错误:“ERROR 388-185:期望算术运算符。”
这似乎是一件微不足道的事情,但不知怎的,我被卡住了。所以任何帮助都将不胜感激。
一些背景知识:
在我的真实数据集中,这个宏变量是通过PROC SQL从数据集创建的,其中每个条目都有几个单词,用空格分隔。像这样:
Product_ID Ingredients
1 Sugar Milk Vanilla
2 Corn Sugar Banana
3 Apple Banana Maple_Syrup Oats
... ...
答案 0 :(得分:4)
非常接近。如果不想评论为什么,您只需要在宏变量名称周围添加双引号:
DATA food;
DO id = 1 TO 10;
Ingredient= SCAN("&myvariable.",id,' ');
OUTPUT;
END;
RUN;
答案 1 :(得分:3)
不需要宏变量和其他所有东西。您可以直接从datastep执行此操作:
**
** 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;