jl60156 发表于 2015-5-29 23:27 
proc sql;
create table have1 as
select sum(n) as n, *
非常感谢,不过显示着一些错误呢
234
235
236
237 proc sql;
238 create table have1 as
239 select sum(n) as n, *
240 from have
241 group by id, year,half, g;
NOTE: 查询要求将汇总统计量与原始的数据重新合并。
WARNING: 变量 n 已经存在于文件“WORK.HAVE1”中。
NOTE: 表 WORK.HAVE1 创建完成,有 75 行,5 列。
242 create table have2 as
243 select distinct *
244 from have1
245 order by id, year,half, g ;
NOTE: 表 WORK.HAVE2 创建完成,有 74 行,5 列。
246 quit;
NOTE: “PROCEDURE SQL”所用时间(总处理时间):
实际时间 0.01 秒
CPU 时间 0.01 秒
247
248 proc transpose data=have2 out=trans(drop=_name_);
249 by id year half;
250 id g;
251 var n;
252 run;
NOTE: 从数据集 WORK.HAVE2. 读取了 74 个观测
NOTE: 数据集 WORK.TRANS 有 16 个观测和 13 个变量。
NOTE: “PROCEDURE TRANSPOSE”所用时间(总处理时间):
实际时间 0.01 秒
CPU 时间 0.01 秒
253 proc sql;
254 select distinct id, count(distinct id) into :ids separated by ' ', :idn
255 from trans
256 quit;
NOTE: 查询要求将汇总统计量与原始的数据重新合并。
257
258 %macro want();
259 %do id=1 %to &idn;
260 %let idk=%scan(&ids,&id,%str( ));
261
262 ods select nlevels;
263 ods output nlevels=nlev&id;
264 proc freq data=trans(where=(id=&idk) drop=year half) levels;
265 run;
266 ods output close;
267 proc sql noprint;
268 select strip(tablevar) ,strip(tablevar) into :vars separated by ' ',
269 :varsd separated
269! by ','
270 from nlev&id
271 where nnonmisslevels ne 0 and tablevar ne 'id';
272 quit;
273 %let nvar=%sysfunc(countw(&vars,' '));
274 data t(keep=&vars id year half);
275 set trans;
276 %do j=1 %to &nvar;
277 %let k=%scan(&vars,&j,%str( ));
278 if missing(&k) then &k=0;
279 if half=1 then &k=-(&k);
280 %end;
281 where id ne &idk;
282 run;
283 proc sql;
284 create table t&id as
285 select sum(sum(&varsd)) as p,&idk as id,year
286 from t
287 group by year
288 order by year;
289 quit;
290 %end;
291 data tall;
292 set %do id=1 %to &idn; t&id %end;;
293 run;
294 proc sort data=have;
295 by id year;
296 run;
297
298 proc sort data=tall;
299 by id year;
300 run;
301 data want;
302 merge have(in=a) tall;
303 by id year;
304 if a;
305 run;
306 %mend;
307
308 %want;
WARNING: 未创建输出“nlevels”。请确保输出对象名称、标签或路径拼写正确。
还需确保使用了相应的过程选项来生成请求的输出对象。如,确保没有使用 NOPRINT 选项。
WARNING: 未创建输出“nlevels”。请确保输出对象名称、标签或路径拼写正确。
还需确保使用了相应的过程选项来生成请求的输出对象。如,确保没有使用 NOPRINT 选项。
WARNING: 当前的 ODS SELECT/EXCLUDE/OUTPUT 语句被清除,因为检测到 PROC 步的结尾。
其原因可能包括交互式过程的无终止(键入 quit; 结束过程)和不带输出的运行组。
NOTE: “PROCEDURE SQL”所用时间(总处理时间):
实际时间 0.06 秒
CPU 时间 0.06 秒
NOTE: 从数据集 WORK.TRANS. 读取了 4 个观测
WHERE id=1;
NOTE: “PROCEDURE FREQ”所用时间(总处理时间):
实际时间 0.11 秒
CPU 时间 0.03 秒
ERROR: 文件“WORK.NLEV1.DATA”不存在。
NOTE: 由于出错,SAS 系统停止处理该步。
NOTE: “PROCEDURE SQL”所用时间(总处理时间):
实际时间 0.00 秒
CPU 时间 0.01 秒
WARNING: 没有解析符号引用 VARS。
NOTE: 由调用宏“WANT”生成行。
4 data t(keep=&vars id year half); set trans;
-
214
23
WARNING: 没有解析符号引用 VARS。
WARNING: 没有解析符号引用 VARS。
WARNING: 没有解析符号引用 VARS。
NOTE: 由宏变量 K 生成行。
1 &vars
-
22
WARNING: 没有解析符号引用 VARS。
NOTE: 由宏变量 K 生成行。
1 &vars
-
180
WARNING: 没有解析符号引用 VARS。
NOTE: 由宏变量 K 生成行。
1 &vars
-
180
WARNING: 没有解析符号引用 VARS。
WARNING: 没有解析符号引用 VARS。
ERROR 214-322: 变量名 & 无效。
ERROR 23-7: 对于“KEEP”选项值无效。
ERROR 22-322: 语法错误,期望下列之一: 名称, 带引号的字符串, 数值常数, 日期时间常数, 缺失值, INPUT, PUT.
ERROR 180-322: 语句无效或未按正确顺序使用。
NOTE: 由于出错,SAS 系统停止处理该步。
NOTE: “DATA 语句”所用时间(总处理时间):
实际时间 0.05 秒
CPU 时间 0.04 秒
NOTE: 由调用宏“WANT”生成行。
8 create table t&id as select sum(sum(&varsd)) as
-
22
8 ! p,&idk as id,year from t group by year order by year;
8 ! quit;
WARNING: 没有解析符号引用 VARSD。
ERROR 22-322: 语法错误,期望下列之一: 名称, 带引号的字符串, 数值常数, 日期时间常数, 缺失值, ), BTRIM, INPUT, PUT,
SUBSTRING, USER.
NOTE: 由于出错,SAS 系统停止处理该步。
NOTE: “PROCEDURE SQL”所用时间(总处理时间):
实际时间 0.01 秒
CPU 时间 0.01 秒
NOTE: 数据集 WORK.NLEV2 有 11 个观测和 5 个变量。
NOTE: 从数据集 WORK.TRANS. 读取了 6 个观测
WHERE id=2;
NOTE: “PROCEDURE FREQ”所用时间(总处理时间):
实际时间 0.01 秒
CPU 时间 0.01 秒
NOTE: “PROCEDURE SQL”所用时间(总处理时间):
实际时间 0.00 秒
CPU 时间 0.00 秒
NOTE: 从数据集 WORK.TRANS. 读取了 10 个观测
WHERE id not = 2;
NOTE: 数据集 WORK.T 有 10 个观测和 10 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
实际时间 0.01 秒
CPU 时间 0.01 秒
NOTE: 表 WORK.T2 创建完成,有 3 行,3 列。
NOTE: “PROCEDURE SQL”所用时间(总处理时间):
实际时间 0.01 秒
CPU 时间 0.01 秒
NOTE: 数据集 WORK.NLEV3 有 11 个观测和 5 个变量。
NOTE: 从数据集 WORK.TRANS. 读取了 6 个观测
WHERE id=3;
NOTE: “PROCEDURE FREQ”所用时间(总处理时间):
实际时间 0.01 秒
CPU 时间 0.01 秒
NOTE: “PROCEDURE SQL”所用时间(总处理时间):
实际时间 0.00 秒
CPU 时间 0.00 秒
NOTE: 从数据集 WORK.TRANS. 读取了 10 个观测
WHERE id not = 3;
NOTE: 数据集 WORK.T 有 10 个观测和 12 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
实际时间 0.00 秒
CPU 时间 0.00 秒
NOTE: 表 WORK.T3 创建完成,有 3 行,3 列。
NOTE: “PROCEDURE SQL”所用时间(总处理时间):
实际时间 0.01 秒
CPU 时间 0.01 秒
ERROR: 文件“WORK.T1.DATA”不存在。
NOTE: 由于出错,SAS 系统停止处理该步。
WARNING: 数据集 WORK.TALL 可能不完整。该步停止时,共有 0 个观测和 3 个变量。
WARNING: 数据集 WORK.TALL 由于该步已停止,而没有被替换。
NOTE: “DATA 语句”所用时间(总处理时间):
实际时间 0.01 秒
CPU 时间 0.01 秒
NOTE: 从数据集 WORK.HAVE. 读取了 75 个观测
NOTE: 数据集 WORK.HAVE 有 75 个观测和 5 个变量。
NOTE: “PROCEDURE SORT”所用时间(总处理时间):
实际时间 0.01 秒
CPU 时间 0.01 秒
NOTE: 输入数据集为空。
NOTE: 数据集 WORK.TALL 有 0 个观测和 3 个变量。
NOTE: “PROCEDURE SORT”所用时间(总处理时间):
实际时间 0.01 秒
CPU 时间 0.01 秒
NOTE: 从数据集 WORK.HAVE. 读取了 75 个观测
NOTE: 从数据集 WORK.TALL. 读取了 0 个观测
NOTE: 数据集 WORK.WANT 有 75 个观测和 6 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
实际时间 0.01 秒
CPU 时间 0.00 秒