我的原始数据在表格中
Var
12 A+
14 A+
AB+ 19
AB:20
20
25
27 New
Run Code Online (Sandbox Code Playgroud)
我想只提取它的数字部分.
任何人都可以帮我解决如何在sas中处理这些数据.
先感谢您.RGDS.
我只是学习sas并看到两个有趣的程序.
proc Delete data = table; run;
Run Code Online (Sandbox Code Playgroud)
和
proc datasets lib=Libr nolist;
modify table;
rename __first = second;
quit;
run;
Run Code Online (Sandbox Code Playgroud)
以及关于它们的几个问题:
为什么有些程序结束一样quit
不run
?
为什么datasets
使用quit
和run
在一起?(这是退出表的声明吗?)
datasets-procedure
用于小任务的最佳建议是什么?(当然不是,但是为了什么?或者不使用它?)
而且,哪种方法更快:proc delete
或sql-drop
?(速度更快,需要的数据量更多)
在这个数据步骤中,我不明白做if last.y
什么......你能告诉我吗?
data stop2;
set stop2;
by x y z t;
if last.y; /*WHAT DOES THIS DO ??*/
if t ne 999999 then
t=t+1;
else do;
t=0;
z=z+1;
end;
run;
Run Code Online (Sandbox Code Playgroud) 我有500列数据集,我想按字母顺序重新排列所有变量.除了在set语句之前使用retain语句之外,我该怎么做呢?
在test_1表中,该my_date
字段是"DATE9".格式.
我想将它转换为纯数字格式(数字长度8),这是格式YYYYMMDD
.
我还想在proc sql语句中理想地执行此操作.
这是我到目前为止所拥有的.
显然,我需要一些东西来操纵my_date字段.
rsubmit;
proc sql;
CREATE TABLE test_2 AS
SELECT
my_date
FROM
test_1
;
quit;
endrsubmit;
Run Code Online (Sandbox Code Playgroud)
仅供参考:我发现很难理解SAS中的各种方法.
为了澄清,该字段实际上应该是数字,而不是字符字段,也不是日期.
我想搜索一个名为"Loan"的sas数据集.
如果我知道特定的库我可以做到 proc datasets
proc datasets
library = work
memtype = data;
contents
data = _all_ (keep = libname memname name)
out = work.table_name;
quit;
run;
Run Code Online (Sandbox Code Playgroud)
(之后我会选择那些包含"贷款"的memname使用index
功能)
我想将行更改library = work
为library = _all_
While文件以访问库信息.有没有其他方法可以完成任务?
SAS有一个(col1-coln)函数的总和,它找到col1,col2,col3 ... coln中所有值的总和.(即,您不必列出所有列名称,只要它们连续编号).这是查找几个(适当命名的)变量之和的便捷捷径.
问题 - 是否存在与此类似的DB2/SQL?我有50列(它们被命名为col1,col2,col3 .... col50,我需要找到它们的总和.即:
select sum(col1, col2, col3,....,col50) AggregateSum
from foo.table
Run Code Online (Sandbox Code Playgroud) 我试图将数字变量传递到此宏.我能够通过KEEP和SET语句传递它,但当它到达RENAME语句时,我得到这些错误:
错误:变量'2013'n不存档WORK.'2013'n.
错误:文件WORK.'2013'n上的DROP,KEEP或RENAME选项无效.
%macro step2(year,cwyear);
TITLE; FOOTNOTE;
DATA WORK._EG_CFMT;
LENGTH label $ 9;
SET WORK."&year."n (KEEP="&year."n "&cwyear."n RENAME=("&year."n =start "&year."n =label)) END=__last;
RETAIN fmtname "cw&year."n type "C";
end=start;
RUN;
%mend step2;
Run Code Online (Sandbox Code Playgroud)
当我改变双年份的双引号时.单引号,像这样:
SET WORK.'&year.'n (KEEP="&year."n "&cwyear."n RENAME=("&year."n =start "&year."n =label))
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
错误:文件工作.'&YEAR.'n.DATA不存在.
当我改回所有双引号并删除n时,我收到以下错误:
错误22-322:语法错误,期望以下之一:名称,带引号的字符串,;,CUROBS,END,INDSNAME,KEY,KEYRESET,KEYS,NOBS,OPEN,POINT,DATA,LAST,NULL.
我该如何工作?
谢谢您的帮助!
在尝试使我的代码更具可读性时,我面临以下情况.
考虑一个数据步骤,您只想在其中选择具有值的观测值variable
.使用WHERE语句似乎有两种方法:单独表达变量或使用MISSING函数.
例如,
案例1. VARIABLE
data where_var;
set sashelp.electric;
where AllPower;
run;
Run Code Online (Sandbox Code Playgroud)
案例2.不丢失的地方(VARIABLE)
data where_not_missing;
set sashelp.electric;
where not missing(AllPower);
run;
Run Code Online (Sandbox Code Playgroud)
这些产生了相同的结果.但是,我不确定是否一定如此.
我在下面编写了此代码以完成2个任务:
我想知道是否有可能用“ proc sql”过程编写此过程,因为这些天我对sql过程真的很感兴趣。
谢谢大家的帮助!
data test4;
set test3;
if ('01JUL2019'd - EXVISDAT + 1) < OverDueDays then do;
miscrit="";
end;
drop targetdays overduedays;
run;
Run Code Online (Sandbox Code Playgroud)
我设法使用proc sql来更改变量的值。但是不知道如何添加该表中的targetdays和overduedays列的删除代码。
proc sql;
update test05
set miscrit = ""
where ('01JUL2019'd - EXVISDAT + 1) < OverDueDays
;
quit;
Run Code Online (Sandbox Code Playgroud)