我正在尝试使用pandas函数read_sas从SAS的.sas7bdat格式读取数据:
import pandas as pd
df = pd.read_sas('D:/input/houses.sas7bdat', format = 'sas7bdat')
df.head()
Run Code Online (Sandbox Code Playgroud)
我在df数据框中有两种数据类型 - float64和object.我对float64数据类型完全满意,所以我可以自由地将它转换为int,string等.问题是对象数据类型,我可以在df dataframe中看到这样包裹:
b'Text'
Run Code Online (Sandbox Code Playgroud)
或者像这样:
b'12345'
Run Code Online (Sandbox Code Playgroud)
代替
Text
Run Code Online (Sandbox Code Playgroud)
要么
12345
Run Code Online (Sandbox Code Playgroud)
我不能将它分别转换为字符串或int或"普通"对象数据类型.此外,我不能使用切片或替换技术来使用b''.所以我无法使用具有对象数据类型的列.请告诉我如何摆脱b''.
我正在使用SAS ODS创建PDF文档.下面的代码可以将4个图形放在1页上.但是,如果我尝试在2页上放置8个图形,我得到的就是1页上的4个图形.我尝试在星号行之间复制部分并在"ods pdf close"上面再次粘贴它.但那没用.我也尝试添加"ods startpage = now;" 两者之间,但也没有用.如何在2页上放置8个图表?
goptions reset=all;
data test;
input x y @@;
datalines;
1 2 2 4 3 8 4 10 5 15
;
run;
ods pdf file="[path]/output.pdf" ;
****
ods layout Start width=10in height=8in ;
ods region x=0 y=5% width=45% height=45%;
proc gplot data=test;
title2 'PLOT #1';
plot y*x /name="mygraph1" noframe;
run;
ods region x=55% y=5% width=45% height=45%;
title2 'PLOT #2';
plot y*x /name="mygraph2" noframe;
run;
ods region x=0 y=51% width=45% height=45%;
title2 'PLOT #3'; …Run Code Online (Sandbox Code Playgroud) 我正在搜索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的函数lag1,lag2并retain在SAS中使用我可以与data.tables一起使用的函数.
我知道R中有类似的功能embed,lag但它们不会返回单个值或前一个值.它们返回一组完整的向量.
R中有什么东西我可以用data.table吗?
有关SAS功能的更多信息:
当我使用数据集导出数据集时PROC EXPORT,SAS 9.4会自动扩展为每个字符串变量的每个观察添加一个额外的(空)字节.例如,在此数据集中:
data test1;
input cust_id $ 1
month 3-8
category $ 10-12
status $ 14-14
;
datalines;
A 200003 ABC C
A 200004 DEF C
A 200006 XYZ 3
B 199910 ASD X
B 199912 ASD C
;
quit;
proc export data = test1
file = "test1.dta"
dbms = stata replace;
quit;
Run Code Online (Sandbox Code Playgroud)
变量cust_id,, category和status应该是str1,str3并且str1在最终的Stata文件中,因此每次观察分别占用1个字节,3个字节和1个字节.然而,SAS自动添加到每个观测,其扩展了它们的数据类型到一个额外的空字节str2,str4和str2在输出Stata的文件数据类型.
这是非常有问题的,因为这是每个字符串变量的每次观察 …
我在宏中定义一个宏变量.然后,我将它喂入第二个宏.在macro2计数器内部将值更改为200.但是,当我检查宏2变量运行后我放入的宏变量内部时,它仍然显示0.我希望它存储值200?这可能吗?
%macro macro1();
%let variable1= 0;
macro2(counter=&variable1)
%put &variable1;
%mend macro1;
%macro1;
Run Code Online (Sandbox Code Playgroud) 一般来说,我们如何处理需要在宏内部修改宏变量的情况; 例如,假设我有这个宏:
%macro test (arg=);
array arrayone [&arg]; /* This is ok */
array arraytwo [&arg+1] /* This is not ok. How to make it work? */
...
Run Code Online (Sandbox Code Playgroud)
当我想要%test(3)然后arraytwo需要采用维度4时,我们如何管理这些情况?
有人知道什么是SAS的最佳R替代品.或者持续.运营商?我没找到.
SAS拥有第一名.最后.自动变量,用于识别具有特定变量的相同值的组中的第一个和最后一个记录; 所以在以下数据集中定义了FIRST.model和LAST.model:
Model,SaleID,First.Model,Last.Model
Explorer,1,1,0
Explorer,2,0,0
Explorer,3,0,0
Explorer,4,0,1
Civic,5,1,0
Civic,6,0,0
Civic,7,0,1
Run Code Online (Sandbox Code Playgroud) 有人可以验证我对 proc sql union 操作的理解吗?我对外部联合和联合之间差异的解释如下:
Union 删除重复的行,而外部 union 不删除
Union 将覆盖列,而默认情况下外部 union 不会。
那么,union all对应和outer union对应的有区别吗?似乎“ALL”会消除第一个差异,而“CORRESPONDING”会消除第二个差异,但我担心我没有看到的两者之间可能存在额外的差异。
有没有办法改变SAS Enterprise Guide窗口的背景颜色?我花了一个多小时试图找到解决方案,但没有成功.不幸的是,我的眼睛不能再采取白色背景.
提前致谢!