SAS的PUT WARNING

该篇文章介绍了使用SAS编程语言执行SQL查询,统计变量abvar在数据集absent1中的缺失情况,并处理可能出现的警告信息。
部署运行你感兴趣的模型镜像

  proc sql noprint;

     select count(abvar) into : abnobs trimmed from absent1;

quit;

data origin_diff;  
    set absent1 nobs=nobs end=eof;
     if &abnobs. ne 0  then do;
        if _n_=1 then put "****************************************************************************";
        put "WAR" "NING: warning[" +1 abvar"].";
        if eof then put "****************************************************************************";
      end;
      else if &abnobs.=0 then do;
        put "****************************************************************************";
        put "there is not a warning.";
        put "****************************************************************************";
      end;
   run;

note:

abvar是存储信息的变量。

WAR" "NING:这样写可以防止warning单词分开!

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

%macro merge_csv_files; %let start_time = %sysfunc(time()); %put NOTE: 宏开始执行时间: %sysfunc(putn(&start_time, time12.3)); %local file_count i current_file all_vars file_counter; %let input_path = C:\Users\20536\Desktop\项目资料\zhiya\; %let output_file = C:\Users\20536\Desktop\项目资料\merged_data.csv; %if %sysfunc(fileexist("&input_path")) = 0 %then %do; %put ERROR: 输入路径存在! &input_path; %return; %end; %put NOTE: 正在扫描CSV文件...; filename filelist "&input_path"; data file_list; length fname $ 200; handle = dopen("filelist"); if handle > 0 then do; count = dnum(handle); do i = 1 to count; fname = dread(handle, i); if prxmatch('/\.csv$/i', strip(fname)) then output; end; rc = dclose(handle); end; keep fname; run; filename filelist clear; proc sql noprint; select count(*) into :file_count trimmed from file_list; quit; %let file_count = %sysfunc(coalesce(&file_count, 0)); %put NOTE: 找到 &file_count 个CSV文件; %let file_counter = 0; %if &file_count > 0 %then %do; data merged; length _dummy 8; delete; run; %do i=1 %to &file_count; %let file_counter = %eval(&file_counter + 1); %put NOTE: 处理进度: &file_counter/&file_count (%.1f%%); %put NOTE: 正在处理文件 #&i; data _null_; set file_list (firstobs=&i obs=&i); call symputx('current_file', catx('\', "&input_path", fname), 'L'); run; %put NOTE: 文件路径: &current_file; %if %sysfunc(fileexist("&current_file")) = 0 %then %do; %put WARNING: 文件存在,跳过: &current_file; %continue; %end; %let rc = 0; proc import datafile="&current_file" out=current_data dbms=csv replace; getnames=yes; guessingrows=500; run; %let rc = &syserr; %if &rc > 0 %then %do; %put ERROR: 导入文件失败: &current_file (RC=&rc); %continue; %end; proc append base=merged data=current_data force nowarn; run; proc delete data=current_data; run; %if %sysfunc(mod(&i, 10)) = 0 %then %do; %put NOTE: 释放内存...; proc datasets lib=work nolist nowarn; delete current_data; quit; %end; %end; %if %sysfunc(exist(merged)) and %sysfunc(attrn(merged, nobs)) > 0 %then %do; %put NOTE: 开始排序数据...; proc sort data=merged out=sorted; by '申请日'n; run; %put NOTE: 保存最终数据集...; data "&output_file"; set sorted; run; %put NOTE: 合并完成! 输出文件: &output_file; proc delete data=merged sorted; run; %end; %else %do; %put WARNING: 合并数据集为空!; %end; %end; %else %do; %put WARNING: 没有找到CSV文件!; %end; %let end_time = %sysfunc(time()); %let total_time = %sysfunc(putn(%sysevalf(&end_time - &start_time), time12.3)); %put NOTE: 宏执行完成! 总耗时: &total_time; %mend merge_csv_files; options mprint mlogic symbolgen fullstimer; %let test_mode = 1; %if %symexist(test_mode) and &test_mode = 1 %then %do; %put NOTE: 进入测试模式 (仅处理前5个文件); %macro merge_csv_files; %local file_count i current_file; %let input_path = C:\Users\20536\Desktop\项目资料\zhiya\; filename filelist "&input_path"; data file_list; length fname $ 200; handle = dopen("filelist"); if handle > 0 then do; count = dnum(handle); do i = 1 to min(count, 5); fname = dread(handle, i); if prxmatch('/\.csv$/i', strip(fname)) then output; end; rc = dclose(handle); end; keep fname; run; filename filelist clear; %include '/path/to/full_macro.sas'; %mend; %end; 以上代码显示” %IF 语句在开型代码中无效。”以及“ %END 语句在开型代码中无效“如何优化
06-30
ERROR: %LOCAL 语句在开型代码中无效。 1 %local file_count i current_file all_vars; 2 %let input_path = C:\Users\20536\Desktop\项目资料\zhiya\; 3 %let output_file = C:\Users\20536\Desktop\项目资料\merged_data.sas7bdat; 4 filename filelist "&input_path"; 5 data file_list; 6 length fname $ 200; 7 handle = dopen("filelist"); 8 if handle > 0 then do; 9 count = dnum(handle); 10 do i = 1 to count; 11 fname = dread(handle, i); 12 if lowcase(scan(fname, -1, '.')) = 'csv' then output; 13 end; 14 rc = dclose(handle); 15 end; 16 keep fname; 17 run; NOTE: 数据集 WORK.FILE_LIST 有 95 个观测和 1 个变量。 NOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.02 秒 CPU 时间 0.01 秒 18 filename filelist clear; NOTE: 已取消文件引用名 FILELIST 的分配。 19 proc sql noprint; 20 select coalesce(count(*), 0) into :file_count trimmed ------- 22 202 ERROR 22-322: 语法错误,期望下列之一: ',', -, FROM, SEPARATED, THROUGH, THRU. ERROR 202-322: 该选项或参数可识别,将被忽略。 21 from file_list; 22 quit; NOTE: 由于出错,SAS 系统停止处理该步。 NOTE: “PROCEDURE SQL”所用时间(总处理时间): 实际时间 0.01 秒 CPU 时间 0.01 秒 WARNING: 没有解析符号引用 FILE_COUNT。 23 %put NOTE: 找到的文件数量 = &file_count; NOTE: 找到的文件数量 = &file_count 24 %if %sysevalf(&file_count > 0) %then %do; ERROR: %IF 语句在开型代码中无效。 25 proc sql; 26 create table all_columns (colname char(200)); NOTE: 表 WORK.ALL_COLUMNS 创建完成,有 0 行,1 列。 27 quit; NOTE: “PROCEDURE SQL”所用时间(总处理时间): 实际时间 0.00 秒 CPU 时间 0.00 秒 ERROR: %DO 语句在开型代码中无效。 28 %do i=1 %to &file_count; 29 data _null_; 30 set file_list (firstobs=&i obs=&i); - 23 ERROR 23-7: 对于“FIRSTOBS”选项值无效。 30 ! set file_list (firstobs=&i obs=&i); - 23 WARNING: 没有解析符号引用 I。 ERROR: & 中无效的数字转换。 WARNING: 没有解析符号引用 I。 ERROR: & 中无效的数字转换。 ERROR 23-7: 对于“OBS”选项值无效。 31 call symputx('current_file', catx('/', "&input_path", fname), 'L'); 32 run; NOTE: 由于出错,SAS 系统停止处理该步。 NOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.01 秒 CPU 时间 0.01 秒 WARNING: 没有解析符号引用 CURRENT_FILE。 33 %put NOTE: 正在处理文件: &current_file; NOTE: 正在处理文件: &current_file 34 proc import 35 datafile="&current_file" WARNING: 没有解析符号引用 CURRENT_FILE。 36 out=temp 37 dbms=csv 38 replace; ERROR: 参数值“0”小于允许的最小值 1。 NOTE: 上一个语句已删除。 39 getnames=yes; 40 guessingrows=0; 41 run; ERROR: 物理文件存在,D:\SAS92\SASFoundation\9.2\&current_file。 ERROR: 导入失败。详细信息,请参阅“SAS 日志”。 NOTE: 由于出错,SAS 系统停止处理该步。 NOTE: “PROCEDURE IMPORT”所用时间(总处理时间): 实际时间 0.09 秒 CPU 时间 0.04 秒 42 proc contents 43 data=temp 44 out=columns_temp(keep=name) ERROR: 文件“WORK.TEMP.DATA”存在。 45 noprint; 46 run; NOTE: 由于上述错误,没有处理语句。 NOTE: 数据集 WORK.COLUMNS_TEMP 有 0 个观测和 0 个变量。 NOTE: “PROCEDURE CONTENTS”所用时间(总处理时间): 实际时间 0.02 秒 CPU 时间 0.01 秒 NOTE: 由于出错,SAS 系统停止处理该步。 47 proc append base=all_columns data=columns_temp force; 48 run; NOTE: 正在追加 WORK.COLUMNS_TEMP 至 WORK.ALL_COLUMNS。 WARNING: 变量 colname 在 DATA 文件中没有找到。 NOTE: 从数据集 WORK.COLUMNS_TEMP. 读取了 0 个观测 NOTE: 添加了 0 个观测。 NOTE: 数据集 WORK.ALL_COLUMNS 有 0 个观测和 1 个变量。 NOTE: “PROCEDURE APPEND”所用时间(总处理时间): 实际时间 0.01 秒 CPU 时间 0.01 秒 49 proc delete data=temp columns_temp; 50 run; WARNING: 文件“WORK.TEMP.DATA”存在。 NOTE: 正在删除 WORK.COLUMNS_TEMP (memtype=DATA)。 NOTE: “PROCEDURE DELETE”所用时间(总处理时间): 实际时间 0.00 秒 CPU 时间 0.00 秒 ERROR: %END 语句在开型代码中无效。 51 %end; 52 proc sql noprint; 53 select distinct name into :all_vars separated by ' ' 54 from all_columns; ERROR: 以下这些列在起作用的表中没有找到: name. 55 quit; NOTE: 由于出错,SAS 系统停止处理该步。 NOTE: “PROCEDURE SQL”所用时间(总处理时间): 实际时间 0.01 秒 CPU 时间 0.00 秒 WARNING: 没有解析符号引用 ALL_VARS。 56 %put NOTE: 所有列名: &all_vars; NOTE: 所有列名: &all_vars 57 data merged; 58 %if "&all_vars" ne "" %then %do; ERROR: %IF 语句在开型代码中无效。 59 length &all_vars $ 500.; - 22 200 WARNING: 没有解析符号引用 ALL_VARS。 ERROR 22-322: 语法错误,期望下列之一: 名称, ;, DEFAULT, _ALL_, _CHARACTER_, _CHAR_, _NUMERIC_. ERROR 200-322: 该符号可识别,将被忽略。 60 attrib &all_vars label=''; - 22 200 WARNING: 没有解析符号引用 ALL_VARS。 ERROR 22-322: 语法错误,期望下列之一: 名称, ;, _ALL_, _CHARACTER_, _CHAR_, _NUMERIC_. ERROR 200-322: 该符号可识别,将被忽略。 61 %end; ERROR: %END 语句在开型代码中无效。 62 %do i=1 %to &file_count; ERROR: %DO 语句在开型代码中无效。 NOTE: 由于出错,SAS 系统停止处理该步。 WARNING: 数据集 WORK.MERGED 可能完整。该步停止时,共有 0 个观测和 1 个变量。 NOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.02 秒 CPU 时间 0.01 秒 63 data _null_; 64 set file_list (firstobs=&i obs=&i); - 23 ERROR 23-7: 对于“FIRSTOBS”选项值无效。 64 ! set file_list (firstobs=&i obs=&i); - 23 WARNING: 没有解析符号引用 I。 ERROR: & 中无效的数字转换。 WARNING: 没有解析符号引用 I。 ERROR: & 中无效的数字转换。 ERROR 23-7: 对于“OBS”选项值无效。 65 call symputx('current_file', catx('/', "&input_path", fname), 'L'); 66 run; NOTE: 由于出错,SAS 系统停止处理该步。 NOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.00 秒 CPU 时间 0.01 秒 67 proc import 68 datafile="&current_file" WARNING: 没有解析符号引用 CURRENT_FILE。 69 out=current_data 70 dbms=csv 71 replace; 72 getnames=yes; 73 run; ERROR: 物理文件存在,D:\SAS92\SASFoundation\9.2\&current_file。 ERROR: 导入失败。详细信息,请参阅“SAS 日志”。 NOTE: 由于出错,SAS 系统停止处理该步。 NOTE: “PROCEDURE IMPORT”所用时间(总处理时间): 实际时间 0.02 秒 CPU 时间 0.03 秒 ERROR: %IF 语句在开型代码中无效。 74 %if "&all_vars" eq "" %then %do; 75 data current_data_fixed; 76 set current_data; ERROR: 文件“WORK.CURRENT_DATA.DATA”存在。 77 run; NOTE: 由于出错,SAS 系统停止处理该步。 WARNING: 数据集 WORK.CURRENT_DATA_FIXED 可能完整。该步停止时,共有 0 个观测和 0 个变量。 NOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.00 秒 CPU 时间 0.00 秒 ERROR: %END 语句在开型代码中无效。 ERROR: %ELSE 语句在开型代码中无效。 78 %end; 79 %else %do; 80 data current_data_fixed; 81 if 0 then set merged; 82 set current_data; ERROR: 文件“WORK.CURRENT_DATA.DATA”存在。 83 run; NOTE: 由于出错,SAS 系统停止处理该步。 WARNING: 数据集 WORK.CURRENT_DATA_FIXED 可能完整。该步停止时,共有 0 个观测和 1 个变量。 WARNING: 数据集 WORK.CURRENT_DATA_FIXED 由于该步已停止,而没有被替换。 NOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.00 秒 CPU 时间 0.00 秒 ERROR: %END 语句在开型代码中无效。 84 %end; 85 proc append base=merged data=current_data_fixed force; 86 run; NOTE: 正在追加 WORK.CURRENT_DATA_FIXED 至 WORK.MERGED。 WARNING: 变量 all_vars 在 DATA 文件中没有找到。 NOTE: 从数据集 WORK.CURRENT_DATA_FIXED. 读取了 0 个观测 NOTE: 添加了 0 个观测。 NOTE: 数据集 WORK.MERGED 有 0 个观测和 1 个变量。 NOTE: “PROCEDURE APPEND”所用时间(总处理时间): 实际时间 0.00 秒 CPU 时间 0.00 秒 87 proc delete data=current_data current_data_fixed; 88 run; WARNING: 文件“WORK.CURRENT_DATA.DATA”存在。 NOTE: 正在删除 WORK.CURRENT_DATA_FIXED (memtype=DATA)。 NOTE: “PROCEDURE DELETE”所用时间(总处理时间): 实际时间 0.00 秒 CPU 时间 0.00 秒 ERROR: %END 语句在开型代码中无效。 ERROR: %IF 语句在开型代码中无效。 89 %end; 90 run; 91 %if %sysfunc(exist(merged)) %then %do; 92 proc sort data=merged; 93 by 申请日 当前申请(专利权)人州/省; - 22 76 ERROR: “申请日”是有效的名称。 ERROR: “当前申请”是有效的名称。 ERROR 22-322: 语法错误,期望下列之一: 名称, ;, -, :, DECENDING, DESCENDING, DESENDING, _ALL_, _CHARACTER_, _CHAR_, _NUMERIC_. ERROR 76-322: 语法错误,语句将被忽略。 94 run; NOTE: 由于出错,SAS 系统停止处理该步。 NOTE: “PROCEDURE SORT”所用时间(总处理时间): 实际时间 0.01 秒 CPU 时间 0.01 秒 95 data "&output_file"; 96 set merged; 97 run; NOTE: 从数据集 WORK.MERGED. 读取了 0 个观测 NOTE: 数据集 C:\Users\20536\Desktop\项目资料\merged_data.sas7bdat 有 0 个观测和 1 个变量。 NOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.00 秒 CPU 时间 0.00 秒 98 %put NOTE: 合并完成! 输出文件: &output_file; NOTE: 合并完成! 输出文件: C:\Users\20536\Desktop\项目资料\merged_data.sas7bdat 99 %end; ERROR: %END 语句在开型代码中无效。 100 %end; ERROR: %END 语句在开型代码中无效。 101 %else %do; ERROR: %ELSE 语句在开型代码中无效。 102 %put WARNING: 没有找到CSV文件!; WARNING: 没有找到CSV文件! 帮我根据以上提示修改SAS代码
06-30
4 %macro merge_csv_files(test_mode=0); 5 %let start_time = %sysfunc(time()); 6 %put NOTE: 宏开始执行时间: %sysfunc(putn(&start_time, time12.3)); 7 8 %local file_count i current_file all_vars file_counter; 9 10 %let input_path = C:\Users\20536\Desktop\项目资料\zhiya\; 11 %let output_file = C:\Users\20536\Desktop\项目资料\merged_data.csv; 12 13 %if %sysfunc(fileexist("&input_path")) = 0 %then %do; 14 %put ERROR: 输入路径存在! &input_path; 15 %return; 16 %end; 17 18 %put NOTE: 正在扫描CSV文件...; 19 filename filelist "&input_path"; 20 21 %if &test_mode = 1 %then %do; 22 %put NOTE: 进入测试模式 (仅处理前5个文件); 23 data file_list; 24 length fname $ 200; 25 handle = dopen("filelist"); 26 if handle > 0 then do; 27 count = dnum(handle); 28 do i = 1 to min(count, 5); 29 fname = dread(handle, i); 30 if prxmatch('/\.csv$/i', strip(fname)) then output; 31 end; 32 rc = dclose(handle); 33 end; 34 keep fname; 35 run; 36 %end; 37 %else %do; 38 data file_list; 39 length fname $ 200; 40 handle = dopen("filelist"); 41 if handle > 0 then do; 42 count = dnum(handle); 43 do i = 1 to count; 44 fname = dread(handle, i); 45 if prxmatch('/\.csv$/i', strip(fname)) then output; 46 end; 47 rc = dclose(handle); 48 end; 49 keep fname; 50 run; 51 %end; 52 53 filename filelist clear; 54 55 proc sql noprint; 56 select count(*) into :file_count trimmed 57 from file_list; 58 quit; 59 60 %let file_count = %sysfunc(coalesce(&file_count, 0)); 61 %put NOTE: 找到 &file_count 个CSV文件; 62 63 %let file_counter = 0; 64 65 %if &file_count > 0 %then %do; 66 data merged; 67 length _dummy 8; 68 delete; 69 run; 70 71 %do i=1 %to &file_count; 72 %let file_counter = %eval(&file_counter + 1); 73 %put NOTE: 处理进度: &file_counter/&file_count; 74 %put NOTE: 正在处理文件 #&i; 75 76 data _null_; 77 set file_list (firstobs=&i obs=&i); 78 call symputx('current_file', catx('\', "&input_path", fname), 'L'); 79 run; 80 81 %put NOTE: 文件路径: &current_file; 82 83 %if %sysfunc(fileexist("&current_file")) = 0 %then %do; 84 %put WARNING: 文件存在,跳过: &current_file; 85 %continue; 86 %end; 87 88 %let rc = 0; 89 proc import 90 datafile="&current_file" 91 out=current_data 92 dbms=csv 93 replace; 94 getnames=yes; 95 guessingrows=500; 96 run; 97 %let rc = &syserr; 98 99 %if &rc > 0 %then %do; 100 %put ERROR: 导入文件失败: &current_file (RC=&rc); 101 %continue; 102 %end; 103 104 proc append base=merged data=current_data force nowarn; 105 run; 106 107 proc delete data=current_data; 108 run; 109 110 %if %sysfunc(mod(&i, 10)) = 0 %then %do; 111 %put NOTE: 释放内存...; 112 proc datasets lib=work nolist nowarn; 113 delete current_data; 114 quit; 115 %end; 116 %end; 117 118 %if %sysfunc(exist(merged)) and %sysfunc(attrn(merged, nobs)) > 0 %then %do; 119 %put NOTE: 开始排序数据...; 120 proc sort data=merged out=sorted; 121 by '申请日'n; 122 run; 123 124 %put NOTE: 保存最终数据集...; 125 proc export data=sorted 126 outfile="&output_file" 127 dbms=csv 128 replace; 129 run; 130 131 %put NOTE: 合并完成! 输出文件: &output_file; 132 133 proc delete data=merged sorted; 134 run; 135 %end; 136 %else %do; 137 %put WARNING: 合并数据集为空!; 138 %end; 139 %end; 140 %else %do; 141 %put WARNING: 没有找到CSV文件!; 142 %end; 143 144 %let end_time = %sysfunc(time()); 145 %let total_time = %sysfunc(putn(%sysevalf(&end_time - &start_time), time12.3)); 146 %put NOTE: 宏执行完成! 总耗时: &total_time; 147 %mend merge_csv_files; 148 %merge_csv_files(test_mode=1); NOTE: 宏开始执行时间: 3:28:55.554 NOTE: 正在扫描CSV文件... NOTE: 进入测试模式 (仅处理前5个文件) NOTE: 数据集 WORK.FILE_LIST 有 5 个观测和 1 个变量。 NOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.01 秒 CPU 时间 0.00 秒 NOTE: 已取消文件引用名 FILELIST 的分配。 NOTE: 由调用宏“MERGE_CSV_FILES”生成行。 149 select count(*) into :file_count trimmed from file_list; ------- 22 202 ERROR 22-322: 语法错误,期望下列之一: ',', -, FROM, SEPARATED, THROUGH, THRU. ERROR 202-322: 该选项或参数可识别,将被忽略。 NOTE: 由于出错,SAS 系统停止处理该步。 NOTE: “PROCEDURE SQL”所用时间(总处理时间): 实际时间 0.00 秒 CPU 时间 0.01 秒 ERROR: %SYSEVALF 函数缺少准备求值的表达式。 ERROR: %SYSFUNC 或 %QSYSFUNC 宏函数引用的函数 COALESCE 中的参数 1 是数字。 ERROR: %SYSCALL、%SYSFUNC 或 %QSYSFUNC 参数列表中检测到无效参数。 %SYSCALL 语句或 %SYSFUNC 以及 %QSYSFUNC 函数引用将终止执行。 NOTE: 找到 . 个CSV文件 WARNING: 没有找到CSV文件! NOTE: 宏执行完成! 总耗时: 0:00:00.056 根据以上运行结果优化代码
06-30
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值