我运行这样的程序:
data january;
set allmonths (keep=product month num_sold cost);
if month='jan' then output january;
sales=num_sold*cost;
put sales;
keep product sales;
run;
数据集1月包含两个变量:产品和销售。但缺少销售价值。
product sales
a .
我理解为什么销售价值缺失,因为它没有在输出语句之前的数据集中定义。
然后,如果输出语句没有,那么为什么这个变量可以包含在1月的数据集中。 Keep语句可以包括列出到每个数据集的每个变量,然后为什么没有值写入数据集。
我想我可能知道原因。 Keep语句是关于变量的,输出是关于观察的。
但我还是想问问和学习。
谢谢!
答案 0 :(得分:1)
Keep是在开始处理数据之前在数据步骤的编译阶段处理的SAS语句之一。在执行if和output语句之前,决定在输出表1月保留哪些变量(由于keep语句)。编写代码的等效方法可能会更清楚:
data january (keep= product sales);
set allmonths (keep=product month num_sold cost);
if month='jan' then output january;
sales=num_sold*cost;
put sales;
run;
为了简化它并让它做你想要的事情:
data january(keep=product sales);
set allmonths(keep=product month num_sold cost);
where month='jan';
sales=num_sold*cost;
run;
答案 1 :(得分:0)
OUTPUT
语句立即运行。因此,在计算SALES的值之前,它正在编写记录。尝试在IF / THEN / OUTPUT语句之前添加另一个PUT语句,您可以看到将要输出的值。
对于此问题,您可能希望使用子集化IF语句或WHERE语句,而不是显式运行OUTPUT语句。如果删除OUTPUT语句,则数据步骤将在数据步骤结束时自动输出记录。
data january;
set allmonths;
if month='jan';
sales=num_sold*cost;
keep product sales;
run;