我知道Sas在处理时从数据集顶部的观察开始,然后进入下一个直到它到达底部观察,但是有一种简单的方法可以使sas处理首先进行底部观察然后再进入顶部?
任何人都可以建议相应的SAS信息在日期时间读取(年/月/年/小时:mm)???
例如
data _null_;
informat from_dt datetime????.;
input from_dt ;
put from_dt=;
cards;
01/01/1960 00:00
;run;
Run Code Online (Sandbox Code Playgroud) 我正在编写一个需要访问SAS数据的程序.我已经下载了SAS的ODBC驱动程序并安装了它们,但我需要能够以编程方式动态创建ODBC连接.以下代码(在Python中)似乎应该工作:
import ctypes
ODBC_ADD_DSN = 1
def add_dsn(name, driver, **kw):
nul, attrib = chr(0), []
kw['DSN'] = name
for attr, val in kw.iteritems():
attrib.append('%s=%s' % (attr, val))
return ctypes.windll.ODBCCP32.SQLConfigDataSource(0, ODBC_ADD_DSN, driver, nul.join(attrib)) == 1
print add_dsn('SAS Test', 'SAS', description = 'Testing SAS')
Run Code Online (Sandbox Code Playgroud)
但它会弹出SAS ODBC配置对话框,设置数据源名称,并等待用户输入信息并关闭对话框.我怎么能避免这种情况?
我有一个sql server 2005数据库,其中包含一个数据类型为bit的列.当我查看sql server management studio中的数据时,我看到列值为0或1,当我用SAS拉动时我看到0或-1,就像SAS正在否定1值.有人对此有解释吗?谢谢.
我正在从包含VARCHAR(5)密钥字段的数据库创建SAS数据集.
此字段包括一些使用全部5个字符的条目和一些使用较少字符的条目.
当我导入这些数据时,我宁愿填写所有较短的条目以使用所有五个字符.对于这个例子,我想在左边填充0,字符为零.因此,114将成为00114,ABCD将成为0ABCD,EA222并将保持原样.
我尝试使用简单的数据语句,但当然以下方法不起作用:
data test;
set databaseinput;
format key $5.;
run;
Run Code Online (Sandbox Code Playgroud)
我已尝试使用用户定义的信息执行此操作,但我不认为可以根据此SAS KB答案在字符字段上正确指定范围.另外,我很确定proc格式不会让我根据传入变量动态定义结果.
我相信这里有一个明显的解决方案,但我只是错过了它.
我正在搜索SAS 9.3宏语言中的for循环(如Python或R中)的等效内容.该DO循环似乎的是解决办法,但正是我以前不工作,因为我想要的.我在一个带有DO循环的数据步骤中创建了一种方法,但它不适用于宏语言.例如,在数据步骤中,此代码正在运行:
DATA _NULL_;
DO i = 1,3,5,9;
PUT i;
END;
RUN;
Run Code Online (Sandbox Code Playgroud)
然后按预期的日志提示:
1
3
5
9
Run Code Online (Sandbox Code Playgroud)
当我尝试在宏中使用%DO循环时,我有一个错误.
%MACRO test();
%DO i = 1,2,4,9 ;
%PUT i = &i;
%END;
%MEND;
%test();
Run Code Online (Sandbox Code Playgroud)
日志提示这些消息:
ERROR: Expected %TO not found in %DO statement.
ERROR: A dummy macro will be compiled
Run Code Online (Sandbox Code Playgroud)
我是SAS和stackoverflow的新手,所以我希望我的问题不是太愚蠢.在Python和R中执行此操作非常简单,因此必须有一种简单的方法在SAS中执行此操作.
谢谢你的帮助 - J.穆勒
我正在尝试读取R中的.sas7bdat文件.当我使用该命令时
library(sas7bdat)
read.sas7bdat("filename")
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Error in read.sas7bdat("county2.sas7bdat") : file contains compressed data
Run Code Online (Sandbox Code Playgroud)
我没有SAS经验,所以任何帮助都将受到高度赞赏.
谢谢!
我想转换x为数字.
DATA test;
input x $1.;
cards;
1
2
0
;
run;
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的方法:
用*1:
/* trial1 */
DATA test1;
SET test;
x = x*1;
run;
Run Code Online (Sandbox Code Playgroud)日志打印以下注释:
NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column).
2470:3
NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).
2470:4
Run Code Online (Sandbox Code Playgroud)
格式不会改变.
用input():
/* trial2 */
DATA test2;
SET test;
x = input(x,BEST1.);
run;`
Run Code Online (Sandbox Code Playgroud)日志打印以下注释:
NOTE: Numeric …Run Code Online (Sandbox Code Playgroud) 是否有任何宏命令允许从另一个程序调用一个程序(%run_program()伪代码)?
程序"设置":
%let myvar="HELLO WORLD!";
Run Code Online (Sandbox Code Playgroud)
计划"计划":
%run_program(Settings); *Pseudo-code;
%put &myvar; *Should print *Should print "HELLO WORLD!";
Run Code Online (Sandbox Code Playgroud)

在许多主流编程语言中,您可以使用布尔数据类型(例如,值可以是true或者false) - 来表示二进制"真/假".
SAS中也有布尔数据类型吗?
例如,在此代码中,变量is_fruit旨在表示二进制true(1)或false(0)情况.由于我不知道任何布尔数据类型(或length类型),我使用数字解决这个问题:
data is_fruit;
length fruit_name $ 40 is_fruit 8.;
input fruit_name $ is_fruit;
datalines;
apple 1
orange 1
car 0
tree 0
chicken 0
peach 1
mango 1
human 0
;
run;
Run Code Online (Sandbox Code Playgroud)
输出:
对我来说,这不是一个非常优雅的数据结构,因为变量is_fruit实际上是一个布尔数据类型(不是数字或字符).所以我的问题又来了......
上面是否有布尔数据类型(或length类型)is_fruit?