Recent Activity
Civil servants today face a complex challenge: delivering more with less, while safeguarding public trust in the digital age. As someone leading general AI literacy initiatives across government departments, I’ve seen a clear truth emerge—understanding AI is no longer the remit of a technical few. It is fast becoming a core skill for the many.
Take fraud, for example. It’s a high-profile issue with steep financial consequences, but it’s also emblematic of a broader challenge: how do we use AI responsibly and effectively to serve the public interest?
A new global study by SAS reveals that fraud, waste, and abuse (FWA) drain up to 16% of public sector budgets, and public trust suffers accordingly. It’s no surprise, then, that 85% of decision-makers rank fraud among their top five priorities—and nearly all plan to use AI and generative AI to combat it in the next two years.
But here’s the critical point for civil leaders: fighting fraud is just one of many use cases that require a more AI-literate public sector workforce. To realise AI’s potential—not only in fraud detection but in everything from tax compliance to benefits administration and citizen services—we must upskill across the board.
A literacy agenda for public value
The temptation is to view AI as a technical domain: something for analysts, data scientists, or digital innovation teams. That’s a mistake. AI touches everything—from how policies are shaped and services are delivered to how risks are assessed and decisions are made.
That’s why our AI literacy initiative is not just about skills, but about culture. We’re building capability not only to use AI tools but to ask better questions about them: How do we trust the output? What biases may be present? What does transparency look like?
When civil servants—from procurement officers to benefits managers—can engage confidently with AI, they become part of the solution. They can spot opportunities, flag concerns, and drive innovation from the ground up.
Why fraud is a compelling entry point
Fraud is a particularly powerful case study for AI literacy because it is visible, urgent, and deeply connected to public trust.
The SAS study shows that AI is already delivering measurable benefits in fraud prevention: 57% of agencies report increased workforce efficiency, while 39% are detecting more fraud, and 38% are better able to prioritise cases. Crucially, AI isn’t replacing human judgement—it’s augmenting it.
This message resonates strongly in our training sessions: AI tools are only as useful as the people who understand how and when to apply them. We explore not just the models, but the ethical and operational contexts—privacy, oversight, unintended consequences. In short, the skills that make civil servants smart AI stewards, not just passive users.
But it’s not just about fraud.
Fraud is where many departments are starting, but the implications of AI literacy extend far wider.
• In health and social care, AI supports better coordination of services across life stages.
• In tax and revenue, it’s enabling more accurate forecasting, fairer compliance, and better citizen engagement.
• In policy and planning, AI is being used to model outcomes, test scenarios, and allocate resources more effectively.
In each case, the challenge is the same: how do we build enough understanding, at all levels, to ensure AI delivers public value without undermining trust?
What civil leaders can do next
If you’re a civil service leader asking how to prepare your teams, here are five practical recommendations:
1. Make AI literacy a core part of digital transformation plans Don’t treat AI as a standalone innovation initiative. Embed AI literacy into wider upskilling programmes, leadership training, and organisational development strategies.
2. Start with practical, relatable examples Fraud is a great starting point, but every department has its own “burning platform.” Choose pilot use cases—like forecasting, triage, or citizen communication—that are manageable and meaningful.
3. Demystify the jargon AI can be intimidating. Focus training on concepts, not code. Explain models through familiar metaphors. Frame skills around impact and ethics, not just tools.
4. Foster cross-functional collaboration AI doesn’t live in IT alone. Create forums where data scientists, policy leads, service designers and frontline staff can learn from each other. Promote shared accountability.
5. Champion responsible AI use According to the SAS study, 48% of leaders cite privacy and security as top concerns, and 43% worry about responsible AI use. Make ethics and governance a visible part of your AI literacy agenda. Civil servants need to understand not just what AI can do, but what it should do.
Final thoughts: trust is the real ROI
Governments have always wrestled with complexity. What’s different today is the speed at which technology can both solve and complicate problems. AI offers extraordinary potential—but only if people understand how to use it wisely.
Fraud is a good place to start. It’s measurable, urgent, and tied to efficiency and trust. But AI literacy must extend beyond fraud to fulfil its promise.
In the end, this isn’t just about technology. It’s about equipping people to work smarter, act faster, and make fairer decisions. That’s what builds public confidence. And that’s the real return on investment in AI literacy.
To learn more about how we’re building AI literacy across the public sector—or to discuss custom workshops for your department—please get in touch with Alina Luchian: alina.luchian@sas.com
@stefanbaciu @cristinabeldie
... View more

0
0
Dear SAS Community, I would like to plot both an overall and a stratified graph on the same graph procedure. I have been using the following procedures for the overall and stratified graphs separately, but I would like to combine them into one graph showing the percentages for both the overall and stratified graphs. /*Creating Data with Categorical Variables for Satisfaction and Age Categories*/ Data Customer_response; set Origina_Data; if Response="Satisfied" then Satisfaction=1; else if Response "Not Satisfied" then Satisfaction=2; if Age lt 35 then Age_Category=1 else if Age ge 35 then Age_Category=2; run; Below is that SAS code that works for the overall graph. /*Creates an Overall Graph for the Satisfaction Variable showing percentages */ title; /* Removes all titles */ Proc sgplot data=Customer_response; format Satisfaction.; styleattrs datacolors=(VIGB VIPK) ; vbar Satisfaction / group=Satisfaction stat=percent; /* Creates a vertical bar chart showing percentages */ LABEL Satisfaction='Satisfaction Category'; XAXIS LABEL = 'Satisfaction'; XAXIS VALUES =("1" "2"); YAXIS LABEL = 'Proportion of Participants According to Satisfaction'; keylegend / title="Customer Satisfaction"; run; Below is the program that seems to produce the desired age stratified graph. /* Frequency plot of percentages for two variables */ Proc freq data=Customer_response; tables Age_Category *Satisfaction / plots=FreqPlot(twoway=cluster scale=Percent) out=Freq2Out; run; /* Dividing by 100 and apply PERCENTw.d format*/ Data Freq2Out; set Freq2Out; Percent = Percent / 100; format Percent PERCENT5.; run; /*Graph showing Satisfaction Stratified by Age Categories*/ ods listing style=listing; ods graphics / width=7.8in height=7in; *title 'Graph showing Satisfaction Stratified by Age Categories'; Proc sgplot data=Freq2Out; format Satisfaction.; styleattrs datacolors=(VIGB VIPK) ; vbar Age_Category / group=Satisfaction groupdisplay=cluster response=Percent; XAXIS LABEL = 'Age Category'; YAXIS LABEL = 'Proportion of Participants According to Satisfaction Categories' VALUES =("1" "2") VALUESDISPLAY=("Satisfied" "Not Satisfied"); keylegend / title="Satisfaction"; run; Those two graphs are currently drawn separately, but I want to have both the overall and stratified graphs combined on the same graph in a single procedure, with the overall graph on the left side and the stratified on the right side of the graph creates. I will be glad to receive assistance from the community. If there is any other more efficient procedure, I would like to see a sample code that I can use to produced those graphs. Thank you.
... View more

0
6
Hello every one, I am using Internet Explorer 11.2485.14393.0 to design and view reports in SAS VA 7.3. A problem started to appear recently when viewing a report in modern view where the icons of the side menus donº't appear any more, however, when using google chrome everything works fine. In Internet Explorer: And even the main menu: While what it used to be before, and what shows on google chrome is: Does anyone have an idea what might be the problem?
... View more

0
6
Hello,
In traditional SAS Stored Process environments, it's possible to chain or link stored processes together to create more flexible, modular web applications—allowing for distributed processing and user interaction between steps.
I’m now working within the SAS Viya Job Execution (JE) platform, and I’m wondering:
Is it possible to chain multiple SAS jobs together using JE?
Can a job call or redirect to another JE job, perhaps passing parameters between them (e.g., via URL or session state)?
Are there any working examples, documentation, or best practices for implementing this chaining technique within JE?
My goal is to implement a multi-step web workflow using SAS Job Execution jobs, where each step can guide the user to the next one and possibly reuse parameters or intermediate results.
If anyone has a simple working demo, or if SAS provides any official documentation, I would greatly appreciate it!
... View more

0
1
I have 2 things I need help with.
My proc tabulate is generating 2 of the same table and I’m not sure why. Can anyone tell me why it’s doing this?
I need help with creating a table just like the one this proc tabulate generates except, for the total columns and rows I want total distinct count for groups A,B,and C instead of the sum. I want to keep the sum as the totals for the $ group. Maybe it would be better to use proc sql for this?
Data Sample;
input
IDA$ IDB$ Month$ Group_ID$ Cost Yr$ IDC$ Type$;
datalines;
428 408 Mar 2 67 2020 1 A
196 176 Feb 2 27 2021 2 A
423 403 Oct 2 160 2023 3 A
191 171 Nov 2 53 2021 4 A
186 166 Sep 1 186 2020 5 A
186 166 Feb 1 226 2020 6 A
421 401 Jan 1 160 2020 6 A
536 516 Nov 1 53 2021 6 A
197 177 Jan 1 80 2021 6 A
184 164 May 2 173 2020 6 A
190 170 July 1 160 2020 11 A
183 163 Aug 1 293 2020 12 A
185 165 Feb 1 306 2020 13 A
193 173 Apr 1 280 2020 14 A
187 167 Nov 1 160 2020 15 A
189 169 Aug 1 147 2021 16 A
184 164 Dec 1 320 2020 17 A
184 164 May 2 133 2020 18 A
184 164 June 2 293 2020 18A
187 167 Nov 1 80 2021 18 A
191 171 Mar 1 160 2020 18 A
535 515 Apr 1 160 2020 18 A
179 159 Feb 1 80 2020 23 A
187 167 May 2 173 2020 24 A
676 656 July 1 67 2021 25 A
187 167 Feb 1 160 2021 26 A
196 176 Mar 1 133 2020 27 A
197 177 July 1 160 2021 30 A
425 405 Dec 1 173 2021 30 A
185 165 Jan 1 120 2020 30 A
;;;
run;
/*Distinct Counts*/
Proc sql;
create table Counts as
select Type,Yr,Month,Group_ID,count(distinct IDB)as B format=comma10.,count(distinct IDA)as A format=comma10.,count(distinct IDC)as C format=comma10.
from Sample
Group by Type,Yr,Month,Group_ID;
quit;
/*Cost*/
Proc sql;
create table Cost as
select Type,Yr,Month,Group_ID, sum(Cost)as Cost format=dollar12.
from Sample
where cost>0
Group by Type,Yr,Month,Group_ID,Group_ID;
quit;
/*Distinct Totals*/
Proc sql;
create table Distinct_Totals as
select Type,Yr,Month,count(distinct IDB)as B_TotalR format=comma10.,count(distinct IDA)as A_TotalR format=comma10.,count(distinct IDC)as C_TotalR format=comma10.
from Sample
Group by Type,Yr,Month
outer union corr
select Type,Yr,Group_ID,count(distinct IDB)as B_TotalC format=comma10.,count(distinct IDA)as A_TotalC format=comma10.,count(distinct IDC)as C_TotalC format=comma10.
from Sample
Group by Type,Yr,Group_ID;
quit;
/*Cost and Distinct Counts*/
data All_Data;
merge Cost Counts;
by Type Yr Month Group_ID;
run;
proc tabulate data= All_Data format=comma6.;
class Type Yr Month Group_ID;
var B A C Cost;
table Type sum=' ',(B A C Cost="$"*format=dollar12. )*(Group_ID=' ' all=[label='Total' style=[background=cxF0F0F0]]*[style=[background=cxF0F0F0]]),
Yr=''*(Month='' all=[label='Total' style=[background=cxF0F0F0]]*[style=[background=cxF0F0F0]]) /misstext=' ';
run;
Thanks!
... View more

0
2
Unanswered topics
These topics from the past 30 days have no replies. Can you help?
Subject | Likes | Author | Latest Post |
---|---|---|---|
0 | |||
0 | |||
0 | |||
0 | |||
0 | |||
0 | |||
0 | |||
0 | |||
0 | |||
0 |